gpt4 book ai didi

pdf - 使用 Itextsharp 裁剪 pdf 的左侧

转载 作者:行者123 更新时间:2023-12-02 21:20:16 27 4
gpt4 key购买 nike

我正在尝试将 pdf 的左侧裁剪为 10 毫米。我用下面的代码 公共(public)无效TrimLeft(字符串源文件路径,字符串输出文件路径) {

        PdfReader pdfReader = new PdfReader(sourceFilePath);
float width =(float) GetPDFwidth(sourceFilePath);
float height = (float)GetPDFHeight(sourceFilePath);
float widthTo_Trim = iTextSharp.text.Utilities.MillimetersToPoints(10);
// Set which part of the source document will be copied.

// PdfRectangel(bottom-left-x, bottom-left-y, upper-right-x, upper-right-y)

PdfRectangle rect = new PdfRectangle(0, 0, width - widthTo_Trim, height);
PdfRectangle rectLeftside = new PdfRectangle(0,0,width - widthTo_Trim, height);
using (var output = new FileStream(outputFilePath, FileMode.CreateNew, FileAccess.Write))
{
// Create a new document
Document doc = new Document();

// Make a copy of the document
PdfSmartCopy smartCopy = new PdfSmartCopy(doc, output);

// Open the newly created document
doc.Open();

// Loop through all pages of the source document
for (int i = 1; i <= pdfReader.NumberOfPages; i++)
{
// Get a page
var page = pdfReader.GetPageN(i);

// Apply the rectangle filter we created
page.Put(PdfName.CROPBOX, rectLeftside);
page.Put(PdfName.MEDIABOX, rectLeftside);

// Copy the content and insert into the new document
var copiedPage = smartCopy.GetImportedPage(pdfReader, i);
smartCopy.AddPage(copiedPage);
}

// Close the output document
doc.Close();

}
}

它的 pdf 右侧裁剪图。我尝试改变坐标 PdfRectangle rectLeftside = new PdfRectangle(0,0,宽度 - widthTo_Trim, 高度);但无法得到想要的结果。我如何裁剪 X 毫米左侧

最佳答案

将评论中的提示作为实际答案...

您可以像这样创建新的裁剪框矩形:

PdfRectangle rectLeftside = new PdfRectangle(0,0,width - widthTo_Trim, height);

有问题的构造函数是:

/**
* Constructs a <CODE>PdfRectangle</CODE>-object.
*
* @param llx lower left x
* @param lly lower left y
* @param urx upper right x
* @param ury upper right y
*/
...
public PdfRectangle(float llx, float lly, float urx, float ury)

因此,假设您的原始 PDF 具有左下坐标 (0,0) 的裁剪框,您的代码将操作右上角的 x,即框的右侧。另一方面,你实际上想要操纵左侧。因此,您应该使用如下内容:

PdfRectangle rectLeftside = new PdfRectangle(widthTo_Trim, 0, width, height);

经过评论的提示,这也是OP的解决方案。

其他改进

使用 PdfStamper

OP 使用 PdfSmartCopy 实例及其方法 GetImportedPage 来裁剪 pdf 的左侧。 虽然这已经比使用对于此任务,操作单个 PDF 的最佳选择通常是 PdfStamper:您不必再复制任何内容,只需应用更改即可。此外,内部结果更像原始结果。

逐页确定框

他的代码中的OP假设

  1. PDF 中所有页面的恒定大小(他在方法 GetPDFwidthGetPDFHeight 中确定)和
  2. 所有页面上当前裁剪框的左下坐标 (0,0) 不变。

这些假设均不适用于所有 PDF。因此,应该分别检索和操作每一页的裁剪框。

代码

public void TrimLeftImproved(string sourceFilePath, string outputFilePath)
{
PdfReader pdfReader = new PdfReader(sourceFilePath);
float widthTo_Trim = iTextSharp.text.Utilities.MillimetersToPoints(10);

using (FileStream output = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, output))
{
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
Rectangle cropBox = pdfReader.GetCropBox(page);
cropBox.Left += widthTo_Trim;
pdfReader.GetPageN(page).Put(PdfName.CROPBOX, new PdfRectangle(cropBox));
}
}
}

关于pdf - 使用 Itextsharp 裁剪 pdf 的左侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28171199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com