下面是我正在使用的代码,我提供了一个pdf文件和一个文本文件作为命令行的输入.
import org.pdfbox.cos.COSDocument;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.pdmodel.PDDocumentInformation;
import org.pdfbox.util.PDFTextStripper;
import java.io.File;
import java.io.FileInputStream;
import java.io.PrintWriter;
public class PDFTextParser {
PDFParser parser;
String parsedText;
PDFTextStripper pdfStripper;
PDDocument pdDoc;
COSDocument cosDoc;
PDDocumentInformation pdDocInfo;
// PDFTextParser Constructor
public PDFTextParser() {
}
// Extract text from PDF Document
String pdftoText(String fileName) {
System.out.println("Parsing text from PDF file " + fileName + "....");
File f = new File(fileName);
if (!f.isFile()) {
System.out.println("File " + fileName + " does not exist.");
return null;
} …
Run Code Online (Sandbox Code Playgroud) 我想使用PDFBox打印 iText创建的PDF文件.我已经使用PDDocument类及其方法print()成功地尝试了这个.您可以在此处找到文档:http://pdfbox.apache.org/apidocs/.
(我正在使用此代码:)
public static void printPDF(String fileName)
throws IOException, PrinterException {
PDDocument doc = PDDocument.load(fileName);
doc.print();
}
Run Code Online (Sandbox Code Playgroud)
方法print()效果很好,但有一个问题:当我需要打印多个文件时,该方法要求我为每个文件选择打印机.
有没有办法如何只设置一次打印机?
对于打印机选择,我可以使用此代码,例如:
public static PrintService choosePrinter() {
PrinterJob printJob = PrinterJob.getPrinterJob();
if(printJob.printDialog()) {
return printJob.getPrintService();
}
else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
public static PrintService choosePrinter() {
PrinterJob printJob = PrinterJob.getPrinterJob();
if(printJob.printDialog()) {
return printJob.getPrintService();
}
else {
return null;
}
}
public static void printPDF(String fileName, PrintService printer)
throws IOException, PrinterException …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从HTML内容创建PDF.
public byte[] generatePdf(final XhtmlPDFGenerationRequest request) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PDDocument document = new PDDocument();
InputStream stream = new ByteArrayInputStream(request.getContent()
.getBytes());
PDStream pdstream = new PDStream(document, stream);
document.save(baos);
document.close();
return this.toByteArray(baos);
}
Run Code Online (Sandbox Code Playgroud)
当我拿这个byte[]
并保存到文件时,该文件是空白的.我PDStream
用来将输入流嵌入到文档中
来自http://pdfbox.apache.org/apidocs/
public PDStream(PDDocument doc,
InputStream str)
throws IOException
Run Code Online (Sandbox Code Playgroud)
从输入流中读取所有数据并将其嵌入到文档中,这将关闭InputStream
.
我正在尝试从Java ResultSet创建PDF报告.如果报告只有一页,我在这里没问题.问题来自报告可能长达一到十页的事实.现在,我有这个来创建一个单页文档:
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_LETTER);
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document,page);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何在需要时动态创建页面.是否有一个面向对象的答案盯着我的脸,我只是看不到它?
我正在写硕士论文 - NLP系统.我有一个组件 - 提取器.
它从PDF文件中提取纯文本.有一些PDF文件无法正确提取.Extractor(PDFBox库)返回如下字符串:
"┤xDn║if|d├gDF"Ti&cD╬lhdFÁhis~n╗xdf«"d┤ffih»h"
要么
"10a61a91a22a25a3a27a17a23a20a8a13a14a61a25a17"
我正在检查导致此提取问题的每个文件,并且所有这些文件的文本也无法从PDF Reader(Adobe Reader和FoxIt阅读器)进行复制粘贴.在这个阅读器中查看它们已启用,但在选择其内容并复制到剪贴板后,我得到相同的错误文本(如上所述 - 非语义正确的字符串或数字和字母串).
谁能帮帮我???
我无法使用PDFBox将unicode字符写入PDF.下面是一些生成垃圾字符而不是输出"š"的示例代码.我可以添加什么来获得对UTF-8字符串的支持?
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
PDType1Font font = PDType1Font.HELVETICA;
contentStream.setFont(font, 12);
contentStream.beginText();
contentStream.moveTextPositionByAmount(100, 400);
contentStream.drawString("š");
contentStream.endText();
contentStream.close();
document.save("test.pdf");
document.close();
Run Code Online (Sandbox Code Playgroud) 我需要仅从PDF中提取条形码(使用矩形),而不是将整个PDF转换为图像.
图像格式可以是jpg/png.
当我尝试从我的PDF文件中提取文本时,它似乎在随机插入单词之间插入空格.
我在本页下载部分的以下示例文件中使用了pdfbox-app-1.6.0.jar(最新版本):http: //www.sheffield.gov.uk/roads/children/parents/6-11/pedestrian -训练
我已经尝试了几个其他PDF文件,它似乎在几个页面上做同样的事情.
我做以下事情:
java -jar pdfbox-app-1.6.0.jar ExtractText -force -console~/Desktop/ped training pdf.pdf
在下载的文件中,您将看到以下空格错误地插入到控制台上的结果中:"•如果儿童能够安全地走到学校,这可以减少拥堵."
"•为以后的生活发展良好的习惯."
"www.sheff ield.gov.uk"
"提前考虑!,这是基于"
等等
正如你所看到的,上面的几个单词之间有空格,我无法理解.
我在ubuntu上运行Sun的JDK 1.6.
我已经在几个不同的PDF文件上尝试了这个,并试图在论坛上搜索解决方案,有类似的错误,但似乎都已解决.
任何帮助或如果其他人有相同的问题请评论.这对于正确索引内容以进行搜索造成了很大的问题.
我有(相同)数据保存为GIF图像文件和PDF文件,我想将其解析为HTML或XML.这些数据实际上是我大学食堂的菜单.这意味着有一个新版本的文件必须每周解析!通常,这些文件包含一些页眉和页脚文本,以及一个充满其他数据的表.我已经阅读了有关stackoverflow的一些帖子,我也开始尝试将表数据解析为HTML/XML:
GIF
通过使用PDFBox解析PDF文件,我得到了最好的结果,但仍然(因为菜单每周更改),它不够可靠.我收到的HTML有时包含更多,有时更少的"段落"(<p>
),因此我无法对数据进行足够的解析.
这就是为什么我想知道是否有其他方法可以做到这一点?
我正在尝试使用pdfbox库签署pdf.我现在卡住了,真的需要帮助.
这是我的代码:
private static void signPdf(PDDocument document) throws Exception
{
PDSignature sig = new PDSignature();
sig.setFilter(COSName.ADOBE_PPKLITE);
sig.setSubFilter(COSName.ADBE_PKCS7_DETACHED);
sig.setByteRange(new int[] {'a','a','a','a'});
sig.setContents(new byte[]{(byte) 23, (byte) 23, (byte) 23, (byte) 23});
SignatureOptions options = new SignatureOptions();
document.addSignature(sig, new SignatureInterface() {
public byte[] sign(InputStream content)
throws SignatureException, IOException {
//this should be made MD5 checksum?
return new byte[]{(byte) 'a', (byte) 'a', (byte) 'a', (byte) 'a'};
}
}, options);
}
Run Code Online (Sandbox Code Playgroud)
然后我保存我的pdf,但是:1)我注意到从未调用过sign方法2)我应该在哪里附加certyficate?在签名方法?
PDF格式:
/Type /Sig
/Filter /Adobe.PPKLite
/SubFilter /adbe.pkcs7.sha1
/Contents <0000000000. a lot of zeros..000> …
Run Code Online (Sandbox Code Playgroud) pdfbox ×10
pdf ×8
java ×6
apache-tika ×1
certificate ×1
extraction ×1
image ×1
itext ×1
lucene ×1
pkcs#7 ×1
printing ×1
sign ×1
solr ×1
unicode ×1
utf-8 ×1