- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近总体上接触了 iText -- 看过第 5 版和第 7 版后,我仍然对图章的实现方式感到困惑。我按照使用 iTextSharp 7 的示例代码之一来添加注释:
PdfReader reader = new PdfReader(source);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdfDoc = new PdfDocument(reader, writer);
Rectangle crop = pdfDoc.GetPage(1).GetCropBox();
Debug.WriteLine("CropBox Rectangle Dim "+crop);
ImageData img = ImageDataFactory.Create(imgsrc);
float iWidth = img.GetWidth();
float iHeight = img.GetHeight();
//Ignore the below statement
if (crop.GetWidth() > crop.GetHeight())
{
w = crop.GetWidth();
h = crop.GetHeight();
}
else
{
w = crop.GetHeight();
h = crop.GetWidth();
}
Debug.WriteLine("Width = "+w+" and Height = "+h);
Rectangle location = new Rectangle(crop.GetLeft(),crop.GetBottom(),iWidth,iHeight);
//Creates a Stamp Bounding Box on "Location"
PdfStampAnnotation stamp = new PdfStampAnnotation(location).SetStampName(new PdfName("Logo"));
PdfFormXObject xObj = new PdfFormXObject(new Rectangle(iWidth, iHeight));
PdfCanvas canvas = new PdfCanvas(xObj, pdfDoc);
canvas.AddImage(img, 0, 0, false);
stamp.SetNormalAppearance(xObj.GetPdfObject());
stamp.SetFlags(PdfAnnotation.PRINT);
pdfDoc.GetFirstPage().AddAnnotation(stamp);
pdfDoc.Close();
首先,我注意到我正在使用一个 ImageData 对象来输入我的图像。但是,我找不到任何方法来“缩小”图像 - 类似于 Image.scaleAbsolute。输出的 PDF 最终正确标记,但完全过大。我想我明白 FormXObject 代表什么,但是 Canvas 是干什么用的?它对应于PDF中的什么。任何澄清都可能对协助 future 的实现大有帮助。
谢谢
最佳答案
I can't find any method to "scale" the image down
正如评论中已经解释的那样,AddImage
方法的重载允许缩放图像,特别是:
/// <summary>Creates Image XObject from image and adds it to the specified position with specified width preserving aspect ratio.
/// </summary>
/// <param name="asInline">true if to add image as in-line.</param>
/// <returns>created XObject or null in case of in-line image (asInline = true).</returns>
public virtual PdfXObject AddImage(ImageData image, float x, float y, float width, bool asInline)
/// <summary>Creates Image XObject from image and adds it to canvas.</summary>
/// <param name="asInline">true if to add image as in-line.</param>
/// <returns>created XObject or null in case of in-line image (asInline = true).</returns>
public virtual PdfXObject AddImage(ImageData image, iText.Kernel.Geom.Rectangle rect, bool asInline)
/// <summary>Creates Image XObject from image and adds it to canvas.</summary>
/// <param name="image">
/// the
/// <c>PdfImageXObject</c>
/// object
/// </param>
/// <param name="a">an element of the transformation matrix</param>
/// <param name="b">an element of the transformation matrix</param>
/// <param name="c">an element of the transformation matrix</param>
/// <param name="d">an element of the transformation matrix</param>
/// <param name="e">an element of the transformation matrix</param>
/// <param name="f">an element of the transformation matrix</param>
/// <param name="asInline">true if to add image as in-line.</param>
/// <returns>created Image XObject or null in case of in-line image (asInline = true).</returns>
public virtual PdfXObject AddImage(ImageData image, float a, float b, float c, float d, float e, float f,
bool asInline)
这些重载中的第一个已经帮助了 OP。
I think I understand what the FormXObject represents, but what is the Canvas for? What does it correspond to in the PDF.
[...]
What is the difference between the "Location" rectangle and the PdfFormXObject rectangle
位置
矩形正如 PDF 规范 ISO 32000-1(第 2 部分将于今年发布)所说
An annotation associates an object such as a note, sound, or movie with a location on a page of a PDF document
(第 12.5.1 节注释 - 常规)
因此,要为注释修复的第一件事就是这个 location,它是一个矩形,
The annotation rectangle, defining the location of the annotation on the page in default user space units.
(第 12.5.2 节注释字典)
此处使用的坐标系与为页面定义的 MediaBox 坐标系一致,CropBox 是显示部分。
如果是 OP 代码,则在此处选择此注释矩形:
Rectangle location = new Rectangle(crop.GetLeft(),crop.GetBottom(),iWidth,iHeight);
PdfStampAnnotation stamp = new PdfStampAnnotation(location)...
即注释矩形location
位于可见页面区域的左下方,宽高iWidth,iHeight
。
PdfFormXObject
矩形但是注解是什么样子的呢?实际上注释可以有不同的外观,例如取决于光标是否悬停在它们上面。因此,每个注释对象可能有一个或多个外观在其外观字典中定义为单独的外观流:
Appearance streams enable the annotation to be presented visually in different ways to reflect its interactions with the user. Each appearance stream is a form XObject: a self-contained content stream that shall be rendered inside the annotation rectangle.
(第 12.5.5 节外观流)
所以这里 XObject 形式成为故事的一部分:它们是自包含的,也可以从其他内容流中引用,而不仅仅是从注释中引用。
它们实际上非常独立于注释,以至于它们有自己的坐标系(由其边界框 BBox 给出)并且仅在显示时适合注释矩形,可能经过仿射变换(由其矩阵 Matrix 给出):
Algorithm: Appearance streams
a) The appearance’s bounding box (specified by its BBox entry) shall be transformed, using Matrix, to produce a quadrilateral with arbitrary orientation. The transformed appearance box is the smallest upright rectangle that encompasses this quadrilateral.
b) A matrix A shall be computed that scales and translates the transformed appearance box to align with the edges of the annotation’s rectangle (specified by the Rect entry). A maps the lower-left corner (the corner with the smallest x and y coordinates) and the upper-right corner (the corner with the greatest x and y coordinates) of the transformed appearance box to the corresponding corners of the annotation’s rectangle.
c) Matrix shall be concatenated with A to form a matrix AA that maps from the appearance’s coordinate system to the annotation’s rectangle in default user space:
AA = Matrix * A
(第 12.5.5 节外观流)
如果是 OP 代码,则在此处选择此边界框:
PdfFormXObject xObj = new PdfFormXObject(new Rectangle(iWidth, iHeight));
矩阵未明确给出,因此默认为单位矩阵。
即外观的边界框(PdfFormXObject
矩形)具有宽度和高度 iWidth, iHeight
就像注释矩形一样,但它的左下角是其坐标的原点 (0, 0)系统。
通过上面的算法,它会平滑地适应注释矩形,没有任何扭曲。
有人可能想知道为什么有这么多独立的坐标系需要进行这样的转换。原因很简单:这使得表单 XObjects 可以很容易地重复使用,并且通过选择坐标系使其中的绘图指令尽可能简单。
PdfCanvas
仅仅是一个辅助类,它在 iText 中提供了一种统一的方式来为任何内容流创建内容指令,这里是 XObject 内容流的外观。
关于c# - iTextSharp 7 : Proper Way to Resize Stamps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41985024/
我有一个 View ,不是窗口的大小,也不是窗口本身,当它调整大小时,我想比较调整大小的开始值和结束值。然而,JQ-UI 的 resize ui 对象只包含以前的状态,而不是原始状态,所以它只是按像素
我有一个简单的可调整大小 jQueryUI 元素。 element.resizable({ start: function(event, ui) {...}, resize: func
我有几个嵌套的可调整大小的 div,需要调整大小以适应子大小。一切正常,直到我尝试调整其中一个外部 div 的大小(垂直)然后它卡住了。 这是一个 fiddle . $(function () { $
CNN 模型将大小为 (112x112) 的图像张量作为输入,并给出 (1x512) 大小的张量作为输出。 使用 Opencv 函数 cv2.resize() 或在 pytorch 中使用 Trans
经过大量搜索和研究,我找不到任何答案。 我将非常感谢可以帮助我的人。 在 SWT Java 中, 我希望我的窗口不能调整大小,所以我这样定义它: shell = new Shell(SWT.CLOSE
$(window).bind('resize') 和 $(window).resize() 有什么区别? 我看到bind嵌套在resize之上。它有什么影响?请参阅下面的代码。 我知道.resize(
使用 Vaadin 14.1.19 和 Vaadin“我的入门元素”元素,我尝试创建一个多行 TextArea。乍一看它工作正常,但是当调整 TextArea 大小时,它不会调整行数。这是我的代码:
我有一个使用 Ext.js 的侧面板。在浏览器调整大小之前,侧面板中的其中一个面板很好。浏览器调整大小时,它会切断面板的组件。 如何在浏览器调整大小时调整面板大小? { xtype:
我需要一种可靠的方法来检测 $(window).on('resize') 是否已由用户交互或 jQuery .trigger 调用触发。 我尝试了以下方法,但我似乎没有在函数调用中取回参数: $(wi
我有一个可调整大小的 div,现在我想在调整此框大小/用户完成调整大小时编辑 cookie。 (我有cookie插件) 我该怎么做? PS:我有多个具有不同 id 的 .div。 我的代码不起作用
这些游标类型有什么区别?我在 Chrome/windows 中看到了所有 3 个相同的光标 .e-resize {cursor: e-resize;} .ew-resize {cursor: ew-r
我使用了一个指令,它调用了一个返回一些值的方法,该方法运行良好。但我的问题是它反复调用它,而我想要的是它应该只在调整大小完成时调用该方法。我采取了这种代码形式 https://codepen.io/f
为了检查这种意外行为,我只是将 TextArea 直接放入 PrimaryStage 包含的 Scene 中:在应用程序启动时,TextArea 完全适合窗口(正如预期的那样)。 但是如果我移动窗口的
我在我的项目中使用 jquery-ui-resizable 插件。 默认情况下,当您制作 DOM 对象 jquery-ui-resizable 时,可调整大小的句柄将出现在右下角,我需要在左下角显示可
我正在 MonoTouch 中使用来自 AV Foundation 的 AVPlayer API 开发视频播放器(但 objective-c 中的解决方案也可能不错)。我正在尝试实现全屏模式。 为了显
我只是想让我的响应式 div 示例像这里一样工作 http://voormedia.com/blog/2012/11/responsive-background-images-with-fixed-o
我正在制作一个包含一个 .html 文件和一个 .css 文件的页面。 我已将 bootstrap 4 CDN 合并到我的 html 头中。 网格在中等屏幕尺寸下显示正确,但在我的手机上查看时它没有调
所以我有一个最近出现的非常具体的问题(就在我们计划的明天发布日之前),我不确定如何解决它。我用我有限的前端技能构建了我们的 HTML 模板网站,我们对此非常满意。但是,我似乎无法解决这个问题。 问题:
据我了解,有类instance.method(parameters)=class.method(instance,parameters),所以只是记法上的区别。但是 np.resize(ndarray
window.resize() 和 window.on('resize' , function()) 有什么区别在 jquery 中? 最佳答案 来自 jQuery页面.resize(): This
我是一名优秀的程序员,十分优秀!