【发布时间】:2016-03-03 21:46:41
【问题描述】:
我需要将图像插入到特定位置的现有 pdf 中。我在this 问题上尝试了答案。但是无论我以何种不同的方式将图像插入到 (0,0) 位置(左下角)。我尝试了另一种方法,而不是使用流,而是使用 iTextSharp 中的 Document 类,如 here 所示。现在我可以将图像放置在所需的位置,但这种方法只是用这个图像创建一个新文档。我搜索的大多数文章都使用 PdfReader 和 PdfStamper,所以我认为这是推荐的方式。任何帮助表示赞赏。为我尝试的两种方法发布以下代码。
PdfStamper 方法
private void AddImage(string filePath)
{
string imageURL = @"ImagePath\Image.jpg";
using (Stream inputPdfStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
using (Stream inputImageStream = new FileStream(imageURL, FileMode.Open, FileAccess.Read))
using (Stream outputPdfStream = new FileStream(@"ResultingPdfPath\Abcd.pdf", FileMode.Create, FileAccess.ReadWrite))
{
Image image = Image.GetInstance(inputImageStream);
image.ScaleToFit(100, 100);
var reader = new PdfReader(inputPdfStream);
var stamper = new PdfStamper(reader, outputPdfStream);
PdfContentByte content = stamper.GetUnderContent(1);
image.SetAbsolutePosition(100f, 150f);
content.AddImage(image);
stamper.Close();
reader.Close();
}
}
文档类方法
private void TestMessage(string filePath)
{
string imageURL = @"ImagePath\Image.jpg";
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(filePath, FileMode.Open));
doc.Open();
iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imageURL);
jpg.ScaleToFit(140f, 120f);
jpg.SetAbsolutePosition(100, 100);
jpg.SpacingBefore = 10f;
jpg.SpacingAfter = 1f;
jpg.Alignment = Element.ALIGN_LEFT;
doc.Add(jpg);
doc.Close();
}
如果您需要更多信息,请告诉我。
【问题讨论】:
-
代码 sn -p "文档类方法" 错误:它创建了一个新文档。代码 sn -p "PdfStamper method" 是正确的。您在不同的位置添加图像两次,一次在现有内容的下方,一次在现有内容的顶部。您使用的是硬编码坐标,没有考虑原始 PDF 的页面大小(和裁剪框)。不过,我不相信您声称图像都添加到坐标
(0, 0)。由于您没有说实话,因此无法回答您的问题。 PS:stamper.FormFlattening = true;这行无关紧要,应该去掉。 -
@BrunoLowagie 我在尝试不同的方法时进行了一些更改,但在粘贴之前忘记对其进行编辑。我编辑了这个问题。即使我尝试编辑后的代码,我也无法得到想要的结果。即使我没有考虑页面大小,图像位置也不应该根据我在 SetAbsolutePosition 中给出的值而改变吗?而且我不明白不相信我的说法?
-
您没有告诉我们您的期望。期望的结果是什么?您是否期望图像以其他内容移动的方式插入?在这种情况下,请放弃:PDF 不允许您这样做。你没看图吗?也许它被一个不透明的形状所覆盖,或者它被添加到 页面的可见区域之外。我不相信的是,无论您在
image.SetAbsolutePosition(100f, 150f);行中添加什么而不是100f, 150f,图像总是添加到0, 0。这是不可能的,因此我不相信你说的话。 -
@BrunoLowagie 我希望将图像添加到我在 SetAbsolutePosition 中指定的位置。我什至尝试获取文档的大小并编写代码 image.SetAbsolutePosition(width - 100f, height - 150f) 但没有用。我可以看到图像,但无论我做什么,它总是在左下角。而且我不希望图像移动内容。我认为我的 GetUnderContent 代码会使图像上的内容重叠(如果需要),反之亦然。为什么你这么固执地让我试图隐瞒一些关于我的查询的事情?这样做我能得到什么?
-
当人们说“它不起作用”没有提供证明(例如,以可以检查的 PDF 的形式)并且 没有提供 b> SSCCE,我假设他们不想要答案。还有其他解释吗?我还能假设什么?我无法重现您的问题。成千上万的开发人员通过定义绝对坐标成功地将图像添加到现有 PDF,但您声称“它不起作用”。你要我怎么回应?你让我觉得你并不真正需要帮助。如果你这样做了,你会提供更多信息。
标签: image itextsharp