我的任务非常简单:将pdf文件的每一页转换为图像.我尝试使用icepdf开源版本来生成图像,但它们不会生成具有正确字体的图像.所以我开始使用PDFBox.代码如下:
PDDocument document = PDDocument.load(new File("testing.pdf"));
List<PDPage> pages = document.getDocumentCatalog().getAllPages();
for (int i = 0; i < pages.size(); i++) {
PDPage singlePage = pages.get(i);
BufferedImage buffImage = convertToImage(singlePage, 8, 12);
ImageIO.write(buffImage, "png", new File(PdfUtil.DATA_OUTPUT_DIR+(count++)+".png"));
}
Run Code Online (Sandbox Code Playgroud)
字体看起来不错,但pdf文件中的图片看起来很晕眩(参见附件).我查看源代码,但我仍然不知道如何解决它.你们知道发生了什么事吗?请帮忙.谢谢!!
我能够在现有的pdf文档中插入一个Image,但问题是,
我正在使用以下代码.
List<PDPage> pages = pdDoc.getDocumentCatalog().getAllPages();
if(pages.size() > 0){
PDJpeg img = new PDJpeg(pdDoc, in);
PDPageContentStream stream = new PDPageContentStream(pdDoc,pages.get(0));
stream.drawImage(img, 60, 60);
stream.close();
}
Run Code Online (Sandbox Code Playgroud)
我希望第一页上的图像.
如何使用PDFBOX加载受密码保护的PDF表单
我有一小段代码来加载非受保护的PDF表单
PDDocument pdfDoc;
pdfDoc = PDDocument.load(filePath);
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我..谢谢
当我尝试使用pdfBox绘制png图像时,页面保持空白.有没有办法用pdfBox插入png图像?
public void createPDFFromImage( String inputFile, String image, String outputFile )
throws IOException, COSVisitorException
{
// the document
PDDocument doc = null;
try
{
doc = PDDocument.load( inputFile );
//we will add the image to the first page.
PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get( 0 );
PDXObjectImage ximage = null;
if( image.toLowerCase().endsWith( ".jpg" ) )
{
ximage = new PDJpeg(doc, new FileInputStream( image ) );
}
else if (image.toLowerCase().endsWith(".tif") || image.toLowerCase().endsWith(".tiff"))
{
ximage = new PDCcitt(doc, new RandomAccessFile(new File(image),"r"));
}
else
{ …Run Code Online (Sandbox Code Playgroud) 背景
我在GitHub上有一个小项目,我正在尝试创建一个符合508条款(section508.gov)的PDF,它在复杂的表结构中有表单元素.建议验证这些PDF的工具位于http://www.access-for-all.ch/en/pdf-lab/pdf-accessibility-checker-pac.html,我的程序输出PDF确实通过了大部分检查.我还将了解每个字段在运行时的含义,因此向结构元素添加标记应该不是问题.
问题
PAC 2工具似乎在输出PDF中存在两个特定项目的问题.特别是,我的单选按钮的窗口小部件注释不嵌套在表单结构元素内,并且我的标记内容没有标记(文本和表格单元格).PAC 2验证左上角单元格内的P 结构元素,但不验证标记内容 ...
但是,PAC 2确实将标记的内容标识为错误(即未标记的文本/路径对象).此外,检测单选按钮小部件,但似乎没有API将它们添加到表单结构元素.
我曾经尝试过什么
我已经看过这个网站上的几个问题以及其他关于这个主题的问题,包括这个带有PDFBox的Tagged PDF,但似乎几乎没有PDF/UA的例子和很少有用的文档(我发现).我发现的最有用的提示是在解释标记PDF的规范的网站上,如https://taggedpdf.com/508-pdf-help-center/object-not-tagged/.
问题
是否可以使用包含标记内容和单选按钮窗口小部件注释的Apache PDFBox创建PAC 2可验证PDF?如果可能,是否可以使用更高级别(不推荐)的PDFBox API?
旁注:这实际上是我的第一个StackExchange问题(虽然我已广泛使用该网站),我希望一切顺利!随意添加任何必要的编辑,并询问我可能需要澄清的任何问题.另外,我在GitHub上有一个示例程序,它在https://github.com/chris271/UAPDFBox上生成我的PDF文档.
编辑1:直接链接到输出PDF文档
*编辑2:使用一些较低级别的PDFBox的API,并查看原始数据流与PDFDebugger完全兼容PDF文件后,我就能够产生一个几乎相同的内容结构PDF相比,该标准目录的内容结构.不过,相同的错误显示文本对象没有标记,我真的无法决定从这里去哪里...任何指导将不胜感激!
编辑3: 并排原始PDF内容比较.
编辑4:生成的PDF的内部结构
和兼容的PDF
编辑5:我已经成功修复了标记路径/文本对象的PAC 2错误,这部分得益于Tilman Hausherr的建议!如果我设法解决有关"注释小部件没有嵌套在表单结构元素中"的问题,我将添加一个答案.
我有以下问题.我尝试计算PDFbox中字符串的宽度,使其在矩形中居中.现在我的问题是,我获得了相同的宽度12和32,但是1小于3,所以我的文本是12不居中.我该如何解决这个问题?
谢谢!
我正在尝试创建一个PDF文件,其中包含文档中的大量文本框和来自其他类的文本框.我正在使用PDFBox.
好的,创建一个新文件很简单,编写一行文本很容易.现在,当我尝试插入下一个文本行或文本字段时,它会覆盖内容.
PDDocument doc = null;
PDPage page = null;
try{
doc = new PDDocument();
page = new PDPage();
doc.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
PDPageContentStream title = new PDPageContentStream(doc, page);
title.beginText();
title.setFont( font, 14 );
title.moveTextPositionByAmount( 230, 720 );
title.drawString("DISPATCH SUMMARY");
title.endText();
title.close();
PDPageContentStream title1 = new PDPageContentStream(doc, page);
title1.beginText();
title1.setFont( font, 11 );
title1.moveTextPositionByAmount( 30, 620 );
title1.drawString("DEPARTURE");
title1.endText();
title1.close();
doc.save("PDFWithText.pdf");
doc.close();
} catch (Exception e){
System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud)
它确实给了我一个错误:"你正在覆盖现有内容,你应该使用追加模式".
所以我在尝试title1.appendRawCommands(String),但它没有用.
如何添加新文本框和文本字段(来自其他类)?我已经在互联网上阅读了几十个教程,但他们只展示创建一行.
使用pdfbox,是否可以将PDF(或PDF字节[])转换为图像字节[]?我在网上查看了几个例子,我发现的唯一一个例子描述了如何直接将转换后的文件写入文件系统或将其转换为Java AWT对象.
我宁愿不招致将图像文件写入文件系统的IO,读入byte [],然后删除它.
所以我可以这样做:
String destinationImageFormat = "jpg";
boolean success = false;
InputStream is = getClass().getClassLoader().getResourceAsStream("example.pdf");
PDDocument pdf = PDDocument.load( is, true );
int resolution = 256;
String password = "";
String outputPrefix = "myImageFile";
PDFImageWriter imageWriter = new PDFImageWriter();
success = imageWriter.writeImage(pdf,
destinationImageFormat,
password,
1,
2,
outputPrefix,
BufferedImage.TYPE_INT_RGB,
resolution);
Run Code Online (Sandbox Code Playgroud)
除此之外:
InputStream is = getClass().getClassLoader().getResourceAsStream("example.pdf");
PDDocument pdf = PDDocument.load( is, true );
List<PDPage> pages = pdf.getDocumentCatalog().getAllPages();
for ( PDPage page : pages )
{
BufferedImage image = page.convertToImage();
} …Run Code Online (Sandbox Code Playgroud) 有没有办法在Apache Pdfbox中添加其他字体样式?
我们目前正在尝试在我们的系统中打印PDF(目前正在使用PDF-Renderer.)我一直在寻找各种替代方案(pdfbox,jpedal,jPDFPrint)
我们希望使用免费的GPL兼容库,因此我们倾向于使用pdfbox.我已经能够编写一些示例代码来打印出"有效"的pdf.见下文:
PDDocument doc;
try {
doc = PDDocument.load("test.pdf");
doc.print();
} catch (Exception e) {
// Come up with better thing to do on fail.
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,这是有效的,但我遇到的问题是PdfBox似乎没有识别pdf中使用的字体,因此改变了使用的字体.因此,该文档看起来很奇怪(间距和字符大小不同,看起来很奇怪).我经常看到以下日志消息,或类似的东西:
2014年4月16日下午2:56:21 org.apache.pdfbox.pdmodel.font.PDSimpleFont drawString警告:将<>中的字体从<NimbusMono>更改为默认字体
有没有人知道如何在pdfbox中添加新的fonttype方法(或参考)?或者除此之外,如何更改默认字体类型?
据我所知,pdfbox支持14种标准字体.不幸的是,NimbusMono不是其中之一.任何指导将不胜感激.
我有一个PDF,我使用PDFBox从中提取了一个页面:
(...)
File input = new File("C:\\temp\\sample.pdf");
document = PDDocument.load(input);
List allPages = document.getDocumentCatalog().getAllPages();
PDPage page = (PDPage) allPages.get(2);
PDStream contents = page.getContents();
if (contents != null) {
System.out.println(contents.getInputStreamAsString());
(...)
Run Code Online (Sandbox Code Playgroud)
根据PDF规范,这给出了以下结果,看起来像您期望的结果.
q
/GS0 gs
/Fm0 Do
Q
/Span <</Lang (en-US)/MCID 88 >>BDC
BT
/CS0 cs 0 0 0 scn
/GS1 gs
/T1_0 1 Tf
8.5 0 0 8.5 70.8661 576 Tm
(This page has been intentionally left blank.)Tj
ET
EMC
1 1 1 scn
/GS0 gs
22.677 761.102 …Run Code Online (Sandbox Code Playgroud)