标签: itext7

iText 7.1.0.0 - 如何替换 PDF 表单域中的富表单文本

我有一个带有表单字段的 PDF 模板,我使用iText 7.1.0来替换不同表单字段中的一些占位符文本,该模板工作正常:

PdfReader reader = new PdfReader(pdf_template);    
PdfDocument pdf = new PdfDocument(reader, new PdfWriter(pdf_output));    
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, true);    
form.GetField("Vertragsnummer").SetValue("12345"); 
form.FlattenFields();    
pdf.Close();    
reader.Close();
Run Code Online (Sandbox Code Playgroud)

现在我有一个表单域,它的选项设置为允许富文本格式,因为有些部分带有粗体等。在表单域标准文本中,我又要替换占位符。

目前我有以下代码:

PdfFormField tf_maintext = form.GetField("maintext");   
tf_maintext.SetRichText(tf_maintext.GetRichText());
Run Code Online (Sandbox Code Playgroud)

现在我需要替换占位符,但我没有找到任何适用于 C# 的解决方案。

对于普通表单字段,我可以使用

PdfFormField kdnr = form.GetField("Kundennummer");
kdnr.SetValue(kdnr.GetValueAsString().Replace("7777777777", "1111111111"));
Run Code Online (Sandbox Code Playgroud)

Replace实现这一点的正常功能。

但是我需要一个解决方案来替换富文本格式字段中的文本,以确保格式在之后仍然存在。

我怎样才能做到这一点?

c# forms pdf itext7

5
推荐指数
0
解决办法
460
查看次数

如何在 iText 7 中设置和/或检索默认单元格填充

当您使用 Table 和 Cell 类在 iText 7 中创建表格时,表格单元格默认带有一些内置填充。据我查看生成的文档可以看出,它似乎是大约 2 个 PDF 单位。

有什么方法可以检索此值以用于计算吗?另外,有什么方法可以更改此默认值,以便我可以将自己的填充设置为在所有表中的所有单元格中使用,而不必在每个单元格上单独设置?

itext7

4
推荐指数
1
解决办法
6313
查看次数

如何在 iText7 中调整段落之间的间距

在 iText7 中,我需要在以页面为中心的文档顶部创建 5 行文本。我发现最简单的方法是:

doc.add(new Paragraph("text of line 1").SetTextAlignment(TextAlignment.CENTER));
doc.add(new Paragraph("text of line 2").SetTextAlignment(TextAlignment.CENTER));
Run Code Online (Sandbox Code Playgroud)

等等。但是,每条线之间的空间比我想要的要大。您可以在段落内设置行距,但如何在文档中的段落之间设置行距?或者我这样做是完全错误的方式开始?

itext itext7

4
推荐指数
1
解决办法
4348
查看次数

如何从 iText 7 中的 pdf 页面获取文本位置

我想在 PDF 页面中查找文本位置?

我尝试过的是使用简单的文本提取策略通过 PDF 文本提取器获取 PDF 页面中的文本。我正在循环每个单词以检查我的单词是否存在。使用以下方法拆分单词:

var Words = pdftextextractor.Split(new char[] { ' ', '\n' });
Run Code Online (Sandbox Code Playgroud)

我无法做的是找到文本位置。问题是我无法找到文本的位置。我只需要找到 PDF 文件中单词的 y 坐标。

itext7

4
推荐指数
2
解决办法
1万
查看次数

带有多个签名的 iText7 PDF

我正在将代码从 iText5 迁移到 iText7,目前我正在努力将一个签名附加到已经包含另一个签名的 PDF。这些签名是用我们的国民身份证(公民卡)完成的。

在 iText5 中,我使用了 PdfStamper,但 iText7 中缺少它...

这是我到目前为止:

package cartaocidadao;

import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.Certificate;
import javax.swing.JOptionPane;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.poreid.config.POReIDConfig;
import org.poreid.crypto.POReIDProvider;
import com.itextpdf.signatures.OcspClientBouncyCastle;
import com.itextpdf.signatures.TSAClientBouncyCastle;
import java.io.IOException;
import java.util.Collection;

import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.signatures.BouncyCastleDigest;
import com.itextpdf.signatures.ICrlClient;
import com.itextpdf.signatures.DigestAlgorithms;
import com.itextpdf.signatures.IExternalDigest;
import com.itextpdf.signatures.IExternalSignature;
import com.itextpdf.signatures.IOcspClient;
import com.itextpdf.signatures.PdfSignatureAppearance;
import com.itextpdf.signatures.PdfSigner;
import com.itextpdf.signatures.PrivateKeySignature;
import com.itextpdf.signatures.ITSAClient;
import com.itextpdf.signatures.OCSPVerifier;
import java.security.GeneralSecurityException;
import static javax.swing.JOptionPane.ERROR_MESSAGE;

/**
 *
 * @author i.lourenco
 */
public class Signature …
Run Code Online (Sandbox Code Playgroud)

java itext7

4
推荐指数
1
解决办法
1634
查看次数

iText 7 - 在 PDF 上添加和删除水印

我想使用 iText 7 在 PDF 中添加和删除水印。我能够添加水印,但无法再次删除它。我只能找到与 iText 5 相关的相关代码/示例。感谢任何指点。

这就是我添加水印的方式(使用图层):

            pdfDoc = new PdfDocument(new PdfReader(sourceFile), new PdfWriter(destinationPath));
            var numberOfPages = pdfDoc.GetNumberOfPages();

            PageSize ps = pdfDoc.GetDefaultPageSize();

            for (var i = 1; i <= numberOfPages; i++)
            {
                PdfPage page = pdfDoc.GetPage(i);
                PdfLayer layer = new PdfLayer("watermark", pdfDoc);
                var canvas = new PdfCanvas(page);
                var pageSize = page.GetPageSize();
                var paragraph = new Paragraph(message.WatermarkText).SetFontSize(60);
                paragraph.SetFontColor(Color.BLACK, 0.2f);

                Canvas canvasModel;
                canvas.BeginLayer(layer);
                canvasModel = new Canvas(canvas, pdfDoc, ps);
                canvasModel.ShowTextAligned(paragraph, pageSize.GetWidth() / 2, pageSize.GetHeight() / 2, pdfDoc.GetPageNumber(page), TextAlignment.CENTER, VerticalAlignment.MIDDLE, …
Run Code Online (Sandbox Code Playgroud)

pdf watermark itext itext7

4
推荐指数
1
解决办法
4808
查看次数

iText 7.1.0 展平签名字段,外观拉伸

我有一个 PDF ( https://github.com/giacgbj/stackOverflow/blob/master/xxx.pdf ),以某种方式由第三方进行数字签名,其签名具有外观

原来的

当我使用以下代码(iText 7.1.0)拼合PDF(https://github.com/giacgbj/stackOverflow/blob/master/xxxFlattened.pdf )时

try (PdfWriter output = new PdfWriter("output.pdf");
            PdfDocument input = new PdfDocument(new PdfReader("input.pdf"), output)) {
   PdfAcroForm.getAcroForm(input, true).flattenFields();
}
Run Code Online (Sandbox Code Playgroud)

签名的外观被拉伸成这样:

拉伸的

使用 PDFBox 或 GhostScript 等命令行参数或转换 (imagemagick) 或 pdf2ps/ps2pdf 可以拼合相同的 PDF。

这种行为的原因是什么?

itext pdfbox itext7

4
推荐指数
1
解决办法
669
查看次数

Itext 7 HtmlConverter 无法换行不包含空格字符的单词

我正在使用iText html2PDF2.0.0 版本将 HTML 转换为 PDF。

在我的 HTML 文件中,有太多单词无法包含在表格列中。

这可以在图书馆完成iText 5。这是我的 HTML 和 java 文件。

<html>
<head>
<title>TM_Report</title>

<style type="text/css">
.div-half-width {
	display: inline;
	width: 50%;
	color: red;
}
</style>
</head>
<body>
	<table width="70%" style="">
		<tbody>
			<tr>
				<td width="50%"><p style="width: 80%; background-color: fuchsia;">3aaaa22aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaa1</p></td>
				<td width="50%"><p style="width: 80%; background-color: cyan;">4aaaaaa33aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaa2</p></td>
			</tr>
			<tr>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
			<tr>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
			<tr>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
		</tbody>
	</table>
	
	<p style="word-break: break-all; width: 80%; background-color: fuchsia;">aaaa22aaaaaa-aaaaaaaaaabb-bbbbbbbbbbbbb-bbbbbbbbaaaa-aaaaaaaaaaaaa-aaaaa1aaaa22-aaaaaaaaaaaa-aaaabbbbbbbb-bbbbbbbb_bbbbbbbaa_aaaaaaaaaaa_aaaaaaaaa1aaaa22_aaaaaaaaaaa_aaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaa_aaaaaaaaaaaaa1</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

创建AccessiblePDF.java

public class …
Run Code Online (Sandbox Code Playgroud)

itext7

4
推荐指数
1
解决办法
2879
查看次数

在iText 7中编写文档时如何获取垂直光标位置?

在 iText 5 中,有一个名为的方法getVerticalPosition(),它给出下一个写入的对象在页面上的位置。作为回答这个问题如何找出页面上当前光标的位置?并记录在此处

iText 7 获取页面上当前垂直位置以编写文档的等效项是什么?

更新日期:2018 年 8 月 11 日:根据评论中的回复,我已经更新了添加页面 preak 或新页面的逻辑,但两者仍在同一页面上打印

foreach (var element in RenderHtmlAndCss(document, css, html))
{
AddElement(document, null, (IBlockElement)element);
IRenderer pRenderer = element.CreateRendererSubTree().SetParent(document.GetRenderer());
LayoutResult pLayoutResult = pRenderer.Layout(new LayoutContext(new LayoutArea(0, new Rectangle(pdf.GetDefaultPageSize().GetHeight() - 72, pdf.GetDefaultPageSize().GetWidth() - 72))));
// writer.GetCurrentPos();
float y = pLayoutResult.GetOccupiedArea().GetBBox().GetY();

//20 is height of the content.
if(y<20 && !string.IsNullOrEmpty(LastPageStaticContent))
{
AreaBreak newpage = new AreaBreak(AreaBreakType.NEXT_PAGE);
//pdf.AddNewPage();
}

}

// Add Preface
if (Preface != null && …
Run Code Online (Sandbox Code Playgroud)

pdf-generation itext itext7

4
推荐指数
1
解决办法
3242
查看次数

将页码文本添加到 pdf 副本会被 itext 7 翻转/镜像

所以...我一直在尝试使用 itext 文档中提供的示例来合并文档并为合并的结果创建一个目录。但是将页码文本添加到每个页面的部分并没有像我预期的那样工作。发生的情况是添加的文本在某个水平轴上翻转,如下图所示:

在此处输入图片说明

此外,用于为添加的文本 ( public T setFixedPosition(int pageNumber, float left, float bottom, float width))设置固定位置的方法的 java 文档对我来说没有意义:

为元素的绝对重新定位设置值。指定的坐标对应于元素的左下角并向上增长。

但是当我运行时setFixedPosition(pageNumber, 0, 0, 50),文本最终出现在左上角,再次翻转。如果我分别使用源 PdfDocument 页面大小的宽度和高度作为左侧和底部位置的参数,它甚至不会到达右下角。

我可能做错了什么或误解了什么。无论哪种方式,这是我正在使用的代码:

private static int copyPdfPages(PdfDocument source, Document document, Integer start, Integer pages, Integer number) {
    int oldC;
    int max = start + pages - 1;
    Text text;
    for (oldC = start; oldC <= max; oldC++) {
        text = new Text(String.format("Page %d", number));
        PageSize pageSize = source.getDefaultPageSize();
        source.copyPagesTo(oldC, oldC, document.getPdfDocument());
        document.add(new Paragraph(text).setBorder(new SolidBorder(ColorConstants.RED, 1)) …
Run Code Online (Sandbox Code Playgroud)

pdf copy itext7

4
推荐指数
1
解决办法
536
查看次数

标签 统计

itext7 ×10

itext ×4

pdf ×3

c# ×1

copy ×1

forms ×1

java ×1

pdf-generation ×1

pdfbox ×1

watermark ×1