我正在尝试将PDF(我最喜欢的书籍有效的Java(如果重要的话))转换为文本,我检查了Itext和Apache PDFBox.我看到性能的差异很大:使用了2:521,然后使用PDFBox:6:117. 如果我的pdfbox代码 PDFTextStripper stripper = new PDFTextStripper(); BUFFER.append(stripper.getText(PDDocument.load(pdf))); 这是针对Itext PdfReader reader = new PdfReader(pdf); for (int i = 1; i
以下是关于 pdfbox 的编程技术问答
我的目的是绘制上载的图像,我不知道一个空页面上的PDF文件上的尺寸(DIN A4).对于水平图像,我有一个带有一个水平空页面的PDF文件,对于垂直图像,我有一个带有一个垂直页面的PDF文件. 到目前为止,这是我的代码: File image = convertMultipartFileToFile(file); //I get a MultipartFile from my RequestParam (Spring) - converting works fine BufferedImage awtImage = ImageIO.read(image); String path = ""; if (awtImage.getWidth() > awtImage.getHeight()) { path = MyController.class.getResource("/pdf4ImageUploadHorizontal.pdf").getPath(); } else
我目前正在尝试使用PDFBox生成PDF进行一些手动封面,我想知道是否有可能在我的PDF中进行精确的文本区域,并根据我的Manuel厚度(向左)移动(向左)将由我的手册将拥有的页数确定) 我设法创建了我的pdf,但是我没有找到只能获得文本块的方法. 可以使用pdfbox? 这样做 注意:我试图在网络上和其他问题上搜索,但它们都没有用. 谢谢 解决方案 Wrap SaveGraphicState()和RestoreGraphicState()周围围绕该块.在此中,使用moveTextPositionByAmount()(begIntext()!)或setTexttranslation()或(更一般)contenate2ctm(1,0,0,0,1,Tx,ty)移动位置. 其他解决方案 就像我在评论中所说的那样,我们决定创建一个新的PDF,其中包含所需的信息,而不是尝试编辑现有的PDF. 我们试图编辑PDF,但要静脉,当我们决定从头开始时,这样做更容
我有一个包含链接(PDActions)的文本数据列表,这些链接可能需要在多个页面上渲染. (请参阅下文) **Table of Contents** document1 link 5 document2 link 8 document3 link 11 是否有一种简单的方法可以打印所有这些内容,然后PDFBox决定包裹文本并根据需要将其放入多个页面中.并给我最终的PDDocument? 在此主题上有多个答案,例如 this 一个.但是,答案很旧,我正在检查是否有一种较新,更简单的方法. PDFBox版本:2.0.26 解决方案 PDFBox基本上仍然只有非常低的文本图形API,但是在PDFBox上提供了自动布局的项目. 允许我引用 pdfbox常见问题 我可以使用pd
好吧,我在创建新页面时遇到了一些麻烦. 我从查询中获取数据. 对不起,如果我发布了很多代码,但是一切都需要,我不确定如何做MCVE,因为我很熟悉与PDF合作. 这个问题是: 在编写下一个代码块之前,我可以检查当前的Y坐标,我可以实现这一目标,但是当我需要创建新页面并重新开始写作时,好事 this 这是PDF中使用的代码: public float checkContentStream(float y) throws Exception { float newY = checkYCoord(y, 3, 10); if (newY == 700) { if (content != null) { content.close(); } File file = new File(logoPath); PDJpeg logoImg = new PDJpeg(doc,
我需要在我已经提取的特定坐标中突出显示现有PDF中的一组单词. 我正在使用Apache的PDFBox(最后版本2.0.8). 我可以使用一个示例文件来实现此类目的(addannotations.java pdfbox网站中的Java),但我认为此示例是用较旧的Java版本编译的,因为以下导入不起作用: import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationHighlight; 有人可以帮我吗?使用此库来突出显示单词的最简单方法? 解决方案 这是强调PDF文档中所有单词的代码.仅突出显示一组特定的单词可以轻松地修改此脚本.请注意,这只是一个测试,需要进一步检查新行中终止的单词以及放置在负面景观/肖像PDF页面中的单词.还可以优化此脚本. 此脚本是使用Apache PDFBox 2.0.8. 构建的 import java.io.ByteArrayOutputStream; imp
我正在尝试从文本置词来绘制相应的字形边界框,如PDF 32000文档所示. 这是我的功能,它可以从 glyph空间到用户空间 进行计算 @Override protected void processTextPosition(TextPosition text) { PDFont font = pos.getFont(); BoundingBox bbox = font.getBoundingBox(); Rectangle2D.Float rect = new Rectangle2D.Float(bbox.getLowerLeftX(), bbox.getUpperRightY(), bbox.getWidth(), bbox.getHeight()); AffineTransform at = pos.getTextMatrix().createAffineTransform();
我使用pdfbox来签名PDF.它运行良好.我可以在一个文档中添加几个签名,一切都很好. 现在,有人签署了我的文档(她是通过另一个软件签名),此签名也有效.但是,当我在他的文档中添加另一个修订版(由PDFBox),现在Adobe Reader告诉我PDF已修改. 那是原始文档: 这是由另一个软件完成的签名文档: 当我在签名的PDF中添加另一个修订时,我会得到此文档,其中有问题:链接 如果我在我的软件签名的PDF中添加了另一个修订版,则没有问题链接 解决方案 简而言之: 您的代码将不必要的更改应用于现有的PDF对象. 有些变化仅仅是结构性的,而不是更改实际内容. Acrobat Reader可能会或可能不会忽略这些结构性变化.但是在此过程中,您引入了四舍五入错误,它们明确构成了一个更改. 结构上的变化可能是由PDFBox的怪癖引起的,强制其偏好是哪种对象应直接或间接到其触摸的现有对象上. 在实践中,当涉及安全功能时,实际上几乎没有相关的
我正在使用PDFBox V2将JPG图像转换为PDF. JPG映像已经在文件系统上,因此我只是将其捡起并将其转换为PDF.以下是我的代码 public void convertImgToPDF(String imagePath, String fileName, String destDir) throws IOException { PDDocument document = new PDDocument(); InputStream in = new FileInputStream(imagePath); BufferedImage bimg = ImageIO.read(in); float width = bimg.getWidth(); float height = bimg.getHeight(); PDPage page = new PDPage(new PDRectang
我有一个将文件附加到PDF文件的代码. PDDocument doc = new PDDocument(); PDPage page = new PDPage(); doc.addPage(page); // read attachment file File file = new File("/Users/TMac/Projects/Web/dir/index.html"); FileInputStream inputStream = new FileInputStream(file); PDEmbeddedFile pdEmbeddedFile = new PDEmbeddedFile(doc, inputStream ); pdEmbeddedFile.setSubtype( "application/octet-stream" ); PDComplexFileSpecification fs = new PDComplexFileSpecification(); fs
我目前正在使用Java和PDFBox库即时创建一些PDF. 我需要能够设置某些文本的字符间距/跟踪,但似乎无法弄清楚. 看起来有一种方法可以这样做: http://ci.apache.org/projects/pdfbox/javadoc/javadoc/index.html?org/apache/pdfbox/pdfbox/util/operator/sethecharsator/sethcharspacing.html ,但我不太确定如何在这种情况下应用. cs.beginText(); cs.setFont( font, fontSize ); cs.setNonStrokingColor(color); cs.moveTextPositionByAmount(position[0], position[1]); cs.drawString(text); cs.endText(); 任何帮助将不胜感激!谢谢. 解决方案 您需要以艰难的方式进行操作
我想在pdfbox中创建一个按钮,即验证或重置按钮,该按钮将调用PDF中嵌入式JavaScript的某些函数. 如何在pdfbox中创建这样的按钮? 我尝试使用PDPUSHBUTTON片段遵循代码,但现在正常工作.在这里,当我单击按钮区域时,将显示tick标记符号并在每次点击时切换.边框也没有显示. 相反,我想显示带有标签和边界的普通按钮. 我使用PDFBox版本1.8.10. PDDocument doc = new PDDocument(); PDPage page = new PDPage(); doc.addPage(page); PDAcroForm acroForm = new PDAcroForm(doc); doc.getDocumentCatalog().setAcroForm(acroForm); PDActionJavaScript javascript = new PDAction
让我先概述我的项目.我有一个PDF,我需要使用PDFBox api将其转换为图像(一个图像),然后使用PDFBox api本身将所有这些图像写入新的PDF.基本上,将PDF转换为PDF,我们称为PDF转码. 对于包含JBIG2图像的某些PDF,convertToImage()方法的PDFBox实现在没有任何例外或错误的情况下会静静地失败,最后产生PDF,但是这次,只是带有空白内容(白色).我在控制台上收到的消息是: Dec 06, 2013 5:15:42 PM org.apache.pdfbox.filter.JBIG2Filter decode SEVERE: Can't find an ImageIO plugin to decode the JBIG2 encoded datastream. Dec 06, 2013 5:15:42 PM org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap getRGBImage
使用Adobe Acrobat或其他工具可以在全球范围内替换PDF中的字体吗? 我该怎么做? 解决方案 没有看到您的特定文件,很难说这肯定会起作用.但是,通常将字体定义为这样: /Resources > >> 1 0 obj > endobj 然后将字体资源用作/F13 12 Tf绘制文本的/F13 12 Tf. 如果您要在定义中更改/BaseFont,它将影响该字体资源的所有用途. 其他解决方案 在PDF中替换字体通常不是一个好主意.您不应该期望行为类似于替换字体,例如MS Word文档.在PDF中,绝对将单个字形或字形的雕文定位.在生成PDF时,该定位基于所用字体中字形的各个宽度(和其他指标).当您更换字体时,字形的位置将保持不变,但是通常,字形的宽度将与原始字体中的宽
我使用itext/pdfbox创建PDF文档.当我使用独立的Java类创建PDF时,一切都起作用: public static void main(String[] args){ ... ... ... } 该文档是正确创建的. ,但我需要从servlet创建一个PDF文档.我将代码粘贴到GET或POST方法中,在服务器上运行该servlet,但是未创建PDF文档! 此代码可作为独立应用程序: 此代码不起作用: 解决方案 请阅读文档.例如,问题的答案您当前正在文件系统上创建文件.您没有使用response对象,这意味着您没有向浏览器发送任何字节.这解释了为什么浏览器中什么都没发生. 这是一个简单的例子: public class Hello extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse respon
我不是问这类问题的忠实拥护者,但是,现在已经整整3天试图在我的代码上解决此错误. 我知道这是一个逻辑问题,我知道如何在我的脑海中解决它,但是当涉及将我的想法转化为代码时,我只是无法按照我的意愿工作. 我正在研究合同认可(合同的修改),该合同的数据比较了2个表的数据,如果其中任何一个都更改了,则仅绘制该信息. 有时会发生变化的信息,例如条件的长度或降低长度,这是问题所在. 我制作了一种算法,该算法一旦完成绘制信息,它就会获得最小Y坐标,但是当我更改页面时,必须将坐标重置为700f并从那里重新开始绘画. 我使用的代码首先是由另一个不再在这里的程序员制作的,我不知道如何做 mcve 与pdf的. 但这是我认为可以帮助您的方法. 我如何在PDF上比较和绘制信息的示例: sOffA和sOffE是来自称为SubscriptionOffer和A的类的对象,而E则代表E.认可是MySQL上表Agreement的副本,但已修改了信息.可能这是无关的信息,可能
import java.io.IOException; import javax.swing.text.BadLocationException; import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSFloat; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.cos.COSString; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmode
我必须根据一些输入来生成一个PDF文件.每个代码运行的时间,输入长度可能会有所不同,因此如何根据我的输入内容动态地将页面添加到文档中. . public class pdfproject { static int lineno=768; public static void main (String[] args) throws Exception { PDDocument doc= new PDDocument(); PDPage page = new PDPage(); doc.addPage(page); PDPageContentStream cos = new PDPageContentStream(doc, page); for(int i=0;i