C# 从一组JPEG生成PDF

C# 从一组JPEG生成PDF,c#,asp.net,pdf,pdf-generation,C#,Asp.net,Pdf,Pdf Generation,我在我的服务器上有一套大小相同的JPEG。我可以将其转换为PDF文件服务器端吗?我会尝试使用 类似于 PdfPage page = outputDocument.AddPage(); page.Size = PdfSharp.PageSize.A4; XGraphics gfx = XGraphics.FromPdfPage(page); XImage image = XImage.FromFile("MyJPGFileXXX.jpg"); gfx.DrawImage(image, 0, 0);

我在我的服务器上有一套大小相同的JPEG。我可以将其转换为PDF文件服务器端吗?

我会尝试使用

类似于

PdfPage page = outputDocument.AddPage();
page.Size = PdfSharp.PageSize.A4;
XGraphics gfx = XGraphics.FromPdfPage(page);
XImage image = XImage.FromFile("MyJPGFileXXX.jpg");
gfx.DrawImage(image, 0, 0);
有内置的类来实现这一点。如果所有JPEG都在一个文件夹中,则可以执行以下操作:

FileSystemImageSource source = new FileSystemImageSource(pathToDirectory, "*.jpg", true);
PdfEncoder encoder = new PdfEncoder();
using (FileStream outstm = new FileStream(outputPath, FileMode.Create)) {
    encoder.Save(outstm, source, null);
}
它将把所有以.jpg结尾的图像流到一个输出PDF文件中。每个页面将适合图像的大小(这是可设置的)。据我所知,您可以编码的页面数量没有实际限制(我非常确定,在耗尽堆内存之前,您将超过PDF限制)。在测试中,我在没有给机器造成压力的情况下,通过它运行了数百个图像

如果需要更精细的控制(例如,JPEG压缩级别或使用Flate或JPEG 2000),则可以使用事件控制压缩。颜色配置文件将包括在JPEG中,如果您想要PDF/A-1b,它也会这样做。如果需要,还可以提供一些基本的支持来设置目录


免责声明-我为Atalasoft工作,并亲自编写了FileSystemImageSource和PdfEncoder类(以及几乎所有的底层PDF生成工具)。

我使用iText满足此要求

Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(yourOutFile));
document.open();

for(int i=0;i<numberOfImages;i++){
  Image image1 = Image.getInstance("myImage"+i+".jpg");
  image1.scalePercent(23f);
  document.newPage();
  document.add(image1);
}
document.close();
Document Document=新文档();
getInstance(文档,新文件输出流(yourOutFile));
document.open();

对于(int i=0;我通常使用iText Sharp,但我正在尝试使用这个库,它似乎很容易使用。mdmulinax,请查看我的问题,当我使用PDFSharp时,我得到了扭曲的pdf,您使用的是什么语言,您使用的是什么库?(即,我需要什么来运行这个程序?)是否可以使用DotImage从未保存在文件目录中的JPEG生成PDF(例如,对于数据库中的文件)。因此,除了FileSystemImageSource之外,是否有类似MemoryStreamImageSource或其他允许我向其提供一个流以输出到PDF的东西?@Diskdrive ImageSource和RandomAccessImageSource是抽象类,可以根据您的需要进行子类化。我们还提供了一个为数据库量身定制的DbImageSource。因此,没有内置标准ImageSource类,允许您读取流或字节[]或者什么?这似乎是一个相当常见的用例。@diskdrive图像源应该表示一组图像,进行管理以避免它们占用内存。如果您处理的是字节数组中的单个图像,请使用MemoryStream生成一个AtalaImage,它将直接插入PdfEncoder,PdfEncoder接受和ImageSource或AtalaImages。如果您有其他自定义内容,请构建您自己的ImageSource/RandomAccessImageSource-大约需要15分钟的工作时间。例如,我对该模型的第一个测试是制作一个TwainImageSource,以从TWAIN扫描仪中提取帧。要使这项工作对我有效,我需要什么?(包括哪些库?)@anu我收到以下错误:“不包含'getInstance'的定义”我已经使用iTextSharp.text;using iTextSharp.text.pdf;using iTextSharp;@illDev添加并导入了iText库,需要对问题进行完整的堆栈跟踪。我是一名Java程序员,我猜iTextSharp是为C#编写的,所以你为什么不发布一个新问题,并链接到这篇文章呢。