在C#中不使用第三方库的图像到PDF转换

时间:2015-02-23 06:53:31

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

我需要在不使用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();
        }

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

我搜索过互联网,但我无法得到能够提供正确答案的内容。我得到的就是将它与#34; itextsharp&#34;一起使用。或&#34; PdfSharp&#34;或者使用&#34; GhostScriptApi&#34;。

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

3 个答案:

答案 0 :(得分:1)

这是可行的但不实用,因为它很可能会花费太多时间来实现。一般程序是:

  1. 打开图像文件格式
  2. 将编码的字节逐字复制到您创建的PDF文档中的流中,或者解码图像数据并将其重新编码为PDF流(无论是前者还是后者取决于图像格式)
  3. 保存PDF
  4. 这看起来很简单(毕竟只有三点:-))但是当你开始调查时,你会发现它非常复杂。

    首先,您需要了解足够的PDF规范,从头开始编写新的PDF文件,做好所有正确的事情。 PDF规范现在超过1000页;你并不需要所有这些,但是你需要支持它的很大一部分来编写一个合适的PDF文档。

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

    所以...可能吗?是。似是而非?不会。除非你有足够的时间来完成这个项目。

答案 1 :(得分:0)

具有单个页面和单个图像的最简单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正在执行以下步骤以将图像转换为PDF的Python代码:

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

答案 2 :(得分:0)

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