如何使用java将PNG文件转换为PDF?
Posted
技术标签:
【中文标题】如何使用java将PNG文件转换为PDF?【英文标题】:How can I convert a PNG file to PDF using java? 【发布时间】:2012-01-11 19:28:23 【问题描述】:有没有我可以使用的开源库?
【问题讨论】:
【参考方案1】:itext 可以帮助你。 您并没有真正将 png 转换为 pdf,而是创建一个包含 png 的 pdf。 简单的例子:
Document document = new Document(PageSize.A4, 20, 20, 20, 20);
PdfWriter.getInstance(document, new FileOutputStream("C:/test.pdf"));
document.open();
Image image = Image.getInstance(getClass().getResource("/logo.png"));
document.add(image);
document.close();
【讨论】:
【参考方案2】:如果横向模式更适合,则旋转页面的示例
/**
* Converts arbitrary image file to PDF
* http://***.com/a/42937466/241986
* @param imageFile contents of JPEG or PNG file
* @param outputStream stream to write out pdf, always closed after this method execution.
* @throws IOException when there' an actual exception or image is not valid
*/
public static void imageToPdf(byte[] imageFile, OutputStream outputStream) throws IOException
try
Image image;
try
image = Image.getInstance(imageFile);
catch (BadElementException bee)
throw new IOException(bee);
//See http://***.com/questions/1373035/how-do-i-scale-one-rectangle-to-the-maximum-size-possible-within-another-rectang
Rectangle A4 = PageSize.A4;
float scalePortrait = Math.min(A4.getWidth() / image.getWidth(),
A4.getHeight() / image.getHeight());
float scaleLandscape = Math.min(A4.getHeight() / image.getWidth(),
A4.getWidth() / image.getHeight());
// We try to occupy as much space as possible
// Sportrait = (w*scalePortrait) * (h*scalePortrait)
// Slandscape = (w*scaleLandscape) * (h*scaleLandscape)
// therefore the bigger area is where we have bigger scale
boolean isLandscape = scaleLandscape > scalePortrait;
float w;
float h;
if (isLandscape)
A4 = A4.rotate();
w = image.getWidth() * scaleLandscape;
h = image.getHeight() * scaleLandscape;
else
w = image.getWidth() * scalePortrait;
h = image.getHeight() * scalePortrait;
Document document = new Document(A4, 10, 10, 10, 10);
try
PdfWriter.getInstance(document, outputStream);
catch (DocumentException e)
throw new IOException(e);
document.open();
try
image.scaleAbsolute(w, h);
float posH = (A4.getHeight() - h) / 2;
float posW = (A4.getWidth() - w) / 2;
image.setAbsolutePosition(posW, posH);
image.setBorder(Image.NO_BORDER);
image.setBorderWidth(0);
try
document.newPage();
document.add(image);
catch (DocumentException de)
throw new IOException(de);
finally
document.close();
finally
outputStream.close();
在 pom.xml 中,免费的 iText 分支之一,如果你还没有使用 iText
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.0.1</version>
</dependency>
【讨论】:
使用这种方法如何在同一个文档上写入多个图像 我相信我最终将生成的 PDF 合并到另一个服务中。 这不是很难吗?你介意分享代码吗【参考方案3】:使用 iText 将 jpg/png/gif 转换为 pdf,代码如下。它的工作完美。
import java.io.FileOutputStream;
//com.lowagie... old version
//com.itextpdf... recent version
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.Image;
public class ImageToPDF
public static void main(String ... args)
Document document = new Document();
String input = "c:/temp/capture.png"; // .gif and .jpg are ok too!
String output = "c:/temp/capture.pdf";
try
FileOutputStream fos = new FileOutputStream(output);
PdfWriter writer = PdfWriter.getInstance(document, fos);
writer.open();
document.open();
document.add(Image.getInstance(input));
document.close();
writer.close();
catch (Exception e)
e.printStackTrace();
【讨论】:
【参考方案4】:用于读取 javax.imageio.ImageIO 用于编写pdf itext:http://itextpdf.com
【讨论】:
以上是关于如何使用java将PNG文件转换为PDF?的主要内容,如果未能解决你的问题,请参考以下文章
imagemagick 将 RGB PNG 转换为 CMYK PDF
如何在 Linux 上将 pptx 文件转换为 jpg 或 png(对于每张幻灯片)?
使用 ImageMagick 将 PNG 文件转换为 PDF 时出现粗糙的边缘
使用 GhostScript 将 PDF 转换为透明 PNG