从昨天开始,由于iText jar,我在使用maven进行编译时遇到了问题.我的项目依赖于jasperreports-2.0.1,它依赖于itext-1.02b或更高版本.
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>[1.02b,)</version>
<scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是maven中的日志错误:
Failed to collect dependencies for [jasperreports:jasperreports:jar:2.0.1 (compile)]: Failed to read artifact descriptor for com.lowagie:itext:jar:4.2.2: Could not transfer artifact com.itextpdf:itextpdf:pom:4.2.2 from/to jaspersoft (http://www.jasperforge.org/maven2): Access denied to http://www.jasperforge.org/maven2/com/itextpdf/itextpdf/4.2.2/itextpdf-4.2.2.pom. Error code 403, Forbidden -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
我在这里看到Amedee Van Gasse发表的评论,该评论说明了一个没有jar的4.2.2版本.
为什么1.02b版本附加到4.2.2?
编辑:Jasper-reports使用开放版本范围:
[1.02b)
这个范围说maven采取图书馆最新版本.
随着iText 的更新添加新版Pom没有jar并编辑maven-central的maven-metadata到no-jar版本根据最新的com.lowagie库将编译崩溃到所有jar.
在本地更新您的maven-metadata-central.xml(以及其他元数据,如果您的公司拥有它自己的nexus.public)从... m2\repository\com\lowagie\itext到那个工作.暂时解决方案直到iText更新元数据或所有依赖于它的最新版本公司更新它的pomcom
<metadata modelVersion="1.1.0">
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<versioning>
<latest>4.2.1</latest>
<release>4.2.1</release>
<versions>
<version>0.99</version>
<version>1.1.4</version>
<version>1.02b</version>
<version>1.2.3</version>
<version>1.3</version>
<version>1.3.1</version>
<version>1.4</version>
<version>1.4.8</version>
<version>2.0.1</version>
<version>2.0.6</version>
<version>2.0.7</version>
<version>2.0.8</version>
<version>2.1.0</version>
<version>2.1.2</version>
<version>2.1.3</version> …Run Code Online (Sandbox Code Playgroud) 我目前正在努力处理从LibreOffice文档创建的PDF表单.
我按照"iText in Action"一书中的建议创建了它,现在我试图用一些可以包含Unicode字符的值预先填充嵌入的表单.
这包括一个由base char组成的字符,另外还有一个char(eG M)组合.
我在stackoverflow 和本书中尝试了几个不同的提示 ,但是我从来没有得到一个可以在所有平台上运行的表单的PDF文档:Linux(Okular,Evince,Acrobat DC,macOS Previewer等)
我知道我需要一个字体,覆盖字符并完全嵌入字体.下面是我用来存档PDF文档和PDF文件的代码.
我的问题是:
填写表格的代码:
BaseFont uniFont = BaseFont.createFont("./src/main/resources/UnicodeDoc.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, false, null, null, false);
uniFont.setSubset(false);
// Debugging code...
for (String codepage : uniFont.getCodePagesSupported()) {
System.out.println("Codepage = " + codepage);
}
FileInputStream fis = new FileInputStream(src);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(fis);
PdfStamper stamper = new PdfStamper(reader, baos);
// Fill all fields in PDF form
String text = "aM\u0302a"; // …Run Code Online (Sandbox Code Playgroud) 我想改变jfreechart的背景颜色.它以灰色显示,我想要一个白色背景.我试过chart.setBackgroundPaint(Color.WHITE); 但它并没有向我展示白色背景.我有以下代码显示该图
chart.setBackgroundPaint(Color.WHITE);
Run Code Online (Sandbox Code Playgroud)
我该如何显示白色背景?
我们正在使用带有XML Worker的iText 5.5.7,并且遇到了长表的问题,其中在页面末尾运行的行被分成两个到下一页(见图).
我们尝试page-break-inside:avoid;按照预防页面中断的建议使用iText,XMLWorker和iText在HTML表格中的PDF页面之间切换但没有效果.
我们试过了
<tbody>并应用分页符避免(没有效果)tr, td和应用分页符(无效)td在a中div并应用分页符(itext一旦到达页面结尾就停止处理行)我们的印象page-break-inside:avoid是受到支持但尚未看到对此的确认.是否有使用XML worker创建此效果的示例或最佳实践,或者是执行此级别操作所需的Java API?
干杯
目前正在分页的行:
我想编写一些带有PDF文档的(java)代码,并从所有书签创建命名目标.我认为iText API是最简单的方法,但我之前从未使用过API.
您将如何使用iText API编写此类代码?iText可以自己进行操作现有PDF所需的解析吗?我正在考虑的那种操作是:
或者是否有更好的API?
我有一个可填写,可保存的PDF文件,其中包含所有者密码(我无权访问).我可以在Adobe Reader中填写它,导出FDF文件,修改FDF文件,然后导入它.
然后我尝试用iText for .NET做到这一点.我无法从我的PdfReader创建PdfStamper,因为我没有向读者提供所有者密码.有没有办法以编程方式执行此操作或必须重新创建文档?
即使使用FdfReader也需要PdfStamper.我错过了什么吗?任何合法的东西 - 我很确定我可以破解文件,但我不能.具有讽刺意味的是,重新创建它可能会没问题.
我的java项目有两个部分.
我可以单独做这些事情(填充pdf并创建一个表).但我无法有效地合并它们.我试过做一个doc.add(table),这会导致表格在pdf的下一页上,这是我不想要的.
我基本上只需要能够指定表在页面上的起始位置(因此它不会与现有内容重叠),然后将表格标记到现有的pdf上.
如果这不起作用,我的另一个选择是尝试将字段添加到将由表内容填充的原始pdf(因此它将是基于字段的表).
有什么建议?
编辑:
我是iText的新手并且之前没有使用过columntext,但是我试图在下面的代码中测试它,但是没有显示表.我查看了其他列文本示例,我还没有看到将columntext添加回pdf的确切位置.
//CREATE FILLED FORM PDF
PdfReader reader = new PdfReader(sourcePath);
PdfStamper pdfStamper = new PdfStamper(reader, new FileOutputStream(destPath));
pdfStamper.setFormFlattening(true);
AcroFields form = pdfStamper.getAcroFields();
form.setField("ID", "99999");
form.setField("ADDR1", "425 Test Street");
form.setField("ADDR2", "Test, WA 91334");
form.setField("PHNBR", "(999)999-9999");
form.setField("NAME", "John Smith");
//CREATE TABLE
PdfPTable table = new PdfPTable(3);
Font bfBold12 = new Font(FontFamily.HELVETICA, 12, Font.BOLD, new BaseColor(0, 0, 0));
insertCell(table, "Table", Element.ALIGN_CENTER, 1, bfBold12);
table.completeRow();
ColumnText column = new ColumnText(pdfStamper.getOverContent(1));
column.addElement(table);
pdfStamper.close();
reader.close();
Run Code Online (Sandbox Code Playgroud) 我需要客户能够下载已发送给他们的信件的PDF.
我已经阅读了关于数据库与文件或图像的文件系统存储的线程,听起来有点共识是,对于除了少量图像之外的任何东西,文件系统都是可行的方法.
我想知道的:
我有四个要合并的MemoryStream数据,然后打开pdfDocument,而不创建单个文件.
可以将它们写入文件然后合并它们但这样做会很糟糕,这也会导致一些问题,所以我想避免这种情况.
但是,我找不到将MemoryStreams与iText5 for .NET合并的方法.
现在,这是我用文件做的方式:
private static void ConcatenateDocuments()
{
var stream = new MemoryStream();
var readerFrontPage = new PdfReader(Folder + FrontPageName);
var readerDocA = new PdfReader(Folder + docA);
var readerDocB = new PdfReader(Folder + DocB);
var readerAppendix = new PdfReader(Folder + Appendix);
var pdfCopyFields = new PdfCopyFields(stream);
pdfCopyFields.AddDocument(readerFrontPage);
pdfCopyFields.AddDocument(readerDocA );
pdfCopyFields.AddDocument(readerDocB);
pdfCopyFields.AddDocument(readerAppendix);
pdfCopyFields.Close();
SavePdf(stream, FilenameReport);
}
Run Code Online (Sandbox Code Playgroud)
由于我需要删除文件的使用,因此我保留了MemoryStream,因为不同的部分是从不同的资源构建的.所以我引用了这些内存流.
如何才能做到这一点?
itext ×9
java ×4
pdf ×4
c# ×2
asp.net ×1
bookmarks ×1
c#-4.0 ×1
dependencies ×1
jar ×1
jfreechart ×1
maven ×1
memorystream ×1
merge ×1
pdf-form ×1
swing ×1
tagged-pdf ×1
unicode ×1
xmlworker ×1