【问题标题】:Image to PDF conversion without using third party library in C#在 C# 中不使用第三方库的图像到 PDF 转换
【发布时间】:2015-02-23 06:53:31
【问题描述】:

我需要在不使用 C# 中的第三方库的情况下将图像文件转换为 PDF。图片可以是任何格式,例如(.jpg、.png、.jpeg、.tiff)。

在 itextsharp 的帮助下,我成功地做到了这一点;这是代码。

string value = string.Empty;//value contains the data from a json file
    List<string> sampleData;
    public void convertdata()
    {
        //sampleData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(value);
        var jsonD = System.IO.File.ReadAllLines(@"json.txt");
        sampleData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(jsonD[0]);
        Document document = new Document();

        using (var stream = new FileStream("test111.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            PdfWriter.GetInstance(document, stream);
            document.Open();

            foreach (var item in sampleData)
            {
                newdata = Convert.FromBase64String(item);
                var image = iTextSharp.text.Image.GetInstance(newdata);
                document.Add(image);
                Console.WriteLine("Conversion done check folder");

            }
            document.Close();
        }

但现在我需要在不使用第三方库的情况下执行相同的操作。

我已经搜索了互联网,但我无法获得可以提出正确答案的信息。我得到的只是将它与“itextsharp”或“PdfSharp”或“GhostScriptApi”一起使用。

有人会建议一个可能的解决方案吗?

【问题讨论】:

  • 为什么不能使用库?我敢肯定有一个许可证对您的项目来说足够开放。
  • .NET 不提供此功能,因此您要么需要 PDF 打印机驱动程序、第三方库,要么必须自己编写。
  • 就是这样。我已经尝试使用此代码来满足要求,但它仍然无法满足项目的要求。他们对“不使用第三方库进行转换”感到震惊
  • 我们可以使用其他方式,例如先将图像转换为字节数组或任何其他格式,然后再转换为PDF
  • 如果没有第三方库,这将是困难的,如果不是太具有挑战性的话。您需要浏览 PDF 文档(1300 多页)并了解它们如何以该格式存储数据。

标签: c# image c#-4.0 pdf asp.net-web-api


【解决方案1】:

这是可行的,但从某种意义上说是不切实际的,因为您很可能需要花费太多时间来实施。一般程序是:

  1. 打开图片文件格式
  2. 要么将编码字节逐字复制到您创建的 PDF 文档中的流中,要么将图像数据解码并在 PDF 流中重新编码(无论是前者还是后者,取决于图像格式)
  3. 保存 PDF

这看起来很简单(毕竟只有三点 :-))但是当您开始调查时,您会发现它非常复杂。

首先,您需要充分了解 PDF 规范,才能从头开始编写新的 PDF 文件,并做所有正确的事情。到目前为止,PDF 规范已经超过 1000 页;您不需要全部,但您需要支持其中的大部分来编写正确的 PDF 文档。

其次,您需要了解要支持的每种图像文件格式。这本身并不是微不足道的(例如,TIFF 文件格式是如此广泛,以至于支持合理比例的 TIFF 文件是一场噩梦)。在某些情况下,您可以简单地将大部分图像文件格式复制到您的 PDF 文档中(例如,jpeg 文件属于该类别),这是您想要支持的复杂功能,因为解压缩 JPEG 文件然后重新压缩它PDF 流会导致质量损失。

那么……可能吗?是的。合理吗?不会。除非你有很多时间来完成这个项目。

【讨论】:

  • 感谢@david 的 qoute,所以是否有可能有一些从图像到 PDF 的开源转换代码,如果它使用第三方库就可以,但我需要基本的转换代码。有没有参考???
【解决方案2】:

一页一图的最简单的PDF文档的结构如下:

- pdf header
- pdf document catalog
- pages info 
- image 
  - image header
  - image data 
- page
  - reference to image
- list of references to objects inside pdf document   

检查this Python 代码,它正在执行以下步骤将图像转换为 PDF:

  1. 写入 PDF 标题;
  2. 检查图像数据以查找要使用的过滤器。您最好只选择一种格式,例如 FlateDecode 编解码器(PDF 用于无损压缩图像);
  3. 写入“目录”对象,该对象基本上是对页面对象的引用数组。
  4. 写入图像对象标题;
  5. 将图像数据(逐个像素,转换为给定的编解码器格式)作为 pdf 中的“流”对象写入;
  6. 写入包含“图像”对象的“页面”对象;
  7. 在“预告片”部分写入对 PDF 内对象的引用集及其起始偏移量。 PDF 格式在 PDF 文档的末尾存储对象的引用。

【讨论】:

    【解决方案3】:

    我会编写自己的 ASP.NET Web 服务或 Web API 服务并在应用程序中调用它:)

    【讨论】:

    • 非常有趣。您自己的服务会做什么?
    • 这可能很有趣,但没有哈哈好笑。服务将接受图像并作为响应为您提供 PDF。这样您就可以在服务器上使用第三方库,而您的客户端只需使用某种 Web 客户端来访问该服务。它被称为 SOA(面向服务的架构)。
    • OP 没有要求客户端机器上没有第三方库没有第三方库的解决方案。因此,您的方法只是改变了问题。
    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2021-11-17
    相关资源
    最近更新 更多