首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从pdf文档中获取X和Y坐标

从pdf文档中获取X和Y坐标
EN

Stack Overflow用户
提问于 2017-01-12 03:35:56
回答 1查看 6.5K关注 0票数 0

我试图从点击事件上的pdf文档中获取x和y坐标。Pdf文档没有DOM,这就是为什么我要在pdf文档的顶部覆盖一个div以从div获取坐标。我正在使用itextsharp库,并试图为您盖印pdf文档的值。不幸的是,div的x和y坐标是以像素为单位的,我需要将它们与标记中的值关联起来。我从div click事件获得的X坐标是: 80,300,600,880,我需要在邮票中输入的X坐标是10,205,405,600。要将div坐标转换为压印坐标,我需要应用什么比率。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 private static void InsertTextToPdf(string sourceFileName, string newFileName)
 {
     using (Stream pdfStream = new FileStream(sourceFileName, FileMode.Open))
     {
         using (Stream newpdfStream = new FileStream(newFileName, FileMode.Create, FileAccess.ReadWrite))
         {
                PdfReader pdfReader = new PdfReader(pdfStream);
                iTextSharp.text.Rectangle pageSize = pdfReader.GetPageSize(1);
                Console.Write(pageSize);

                PdfStamper pdfStamper = new PdfStamper(pdfReader, newpdfStream);
                PdfContentByte pdfContentByte = pdfStamper.GetOverContent(1);
                BaseFont baseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.NOT_EMBEDDED);
                pdfContentByte.SetColorFill(BaseColor.RED);
                pdfContentByte.SetFontAndSize(baseFont, 12);
                pdfContentByte.BeginText();
                pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Test", 10, 190, 0);
                pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Test", 205, 190, 0);
                pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Test", 405, 190, 0);
                pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Test", 600, 190, 0);
                pdfContentByte.EndText();
                pdfStamper.Close();
         }
     }
 }

试图获取userUnit --在我的例子中,它们是空的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                PdfReader pdfReader = new PdfReader(pdfStream);
                iTextSharp.text.Rectangle pageSize = pdfReader.GetPageSize(1);
                Console.Write(pageSize);
                iTextSharp.text.pdf.PdfDictionary pageDict = pdfReader.GetPageN(1);
                iTextSharp.text.pdf.PdfNumber userUnit = pageDict.GetAsNumber(iTextSharp.text.pdf.PdfName.USERUNIT);
                Console.Write("\nPageDict " + pageDict);
                Console.Write("\nUser Unit " + userUnit);

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 03:54:00

你在做不同的假设是错误的。

在官方的iText网站上有一个常见问题,您可以在这里找到以前在堆栈溢出上回答过的问题。

测量单元

您必须阅读的第一个常见问题条目是:如何从PDF文件中获取UserUnit?

我引述如下:

FAQ在PDF文档中的度量单元是什么?PDF中的大多数测量以用户空间单元表示。ISO-32000-1 (第8.3.2.3节)告诉我们,“默认用户空间(1/72英寸)中的单位大小与印刷工业中广泛使用的单位点(pt)大致相同。这是不完全相同的,没有关于某一点的普遍定义。“简而言之,是1英寸。= 25.4毫米=72个用户单位(大致相当于72 pt)。

默认情况下,72个用户单元为1英寸,但可以通过定义UserUnit来更改此默认值。

坐标系统:方位

您必须阅读的第二个常见问题条目是:如何在PDF中解释矩形的坐标?

让我复制/粘贴图片:

坐标系:原点

最后,您必须阅读:PDF页面的来源(x,y)在哪里?

在阅读了前面的问题后,您可能会假设左下角对应于坐标(0, 0),但这并不总是正确的。

为什么你的问题不能回答

您声称您正在将PDF显示为图像,并且可以检索坐标作为像素坐标,例如,所有像素行的第300行中的第80像素。但是,如果当您将PDF (矢量数据)转换为光栅图像时,没有人知道PDF是以何种分辨率呈现的,则没有人能够告诉您用户单元与像素的关系。只有你才能知道。

所以请仔细阅读上面列出的问题的答案,这样你就可以做必要的数学了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41612221

复制
相关文章
微信设置 在浏览器中打开 用于下载app单页
文章时间:2019年2月14日 00:18:24 解决问题:在微信内置浏览器中,点击下载,弹出提示框,提示在浏览器中打开 第一步 判断微信的ua var ua = navigator.userAgent; var isWeixin = !!/MicroMessenger/i.test(ua); 第二步 引入默认的隐藏层 <a href="http://nooss.cn/test.apk" id="JdownApp">点击下载APP</a> <a href="http://nooss.cn/test
华创信息技术
2019/11/08
1.7K0
在 Ubuntu 中安装 Vivaldi 浏览器的操作命令
Vivaldi 是一款日益流行的网页浏览器。它基于 Chromium 内核,因此它拥有和 Chrome 类似的功能,但它也新增了一些其他特色功能,让这款浏览器与众不同、更为直观。
用户8989785
2021/10/13
1.3K0
为什么 strace 在 Docker 中不起作用?
在编辑“容器如何工作”爱好者杂志的能力页面时,我想试着解释一下为什么 strace 在 Docker 容器中无法工作。
用户8639654
2021/09/18
6.5K0
在bootstrap中col-md-offset-* 偏移不起作用
在bootstrap中,使用col-md-offset-1、col-md-offset-2、col-md-offset-3、col-md-offset-4等来设置偏移量很常见,但最近就遇到一个问题了,在最新版的bootstrap4.5中,这个值不起作用了。
kirin
2020/10/27
12.6K1
android 混淆不起作用,Android代码混淆的写法总结
Apk文件被反编译出来能被获取到里面的代码。对于这种情况,我们可以对项目代码进行混淆,随机生成难理解的类名,方法名,让代码难以阅读,加大功能被盗取的难度。混淆可以起到压缩Apk,混淆文件,预检,优化的作用。
全栈程序员站长
2022/09/01
3.3K0
解决Hadoop在浏览器中Browse Directory,无法下载文件的问题
把你linux中的hosts文件中的映射数据,复制到windows下的hosts中
手撕代码八百里
2020/07/28
2.6K0
解决Hadoop在浏览器中Browse Directory,无法下载文件的问题
在NETCORE中,实现对AzureBLOB文件的上传下载操作
在之前的文章中,说到了SeaweedFS和MinIO,如果是使用的微软全家桶的话,那肯定就使用Azure Blob了,更直接、更简单和更高效。
老张的哲学
2023/08/23
5310
在NETCORE中,实现对AzureBLOB文件的上传下载操作
Android 10 中的浏览器构建
从 Android 4.4 开始,系统浏览器内核开始从 WebKit 切换到 Chromium。为了保持 API 兼容,Chromium 为 Android WebView 提供了 Chromium WebView 封装。最初 Chromium Webview 代码是位于 AOSP 源码树中,和 AOSP 源码一起构建。到了 Android 5.0,Chromium WebView 代码依然在 AOSP 源码树上,只是 Android 5.0 还支持单独升级 Chromium WebView,这时 Chromium WebView 由一个 名为 webview.apk (从 Chromium 源码 build 出来的叫 SystemWebView.apk,文件名不是那么重要)提供。由于是一个 APK,可以像普通应用 APK 那样安装、升级。到了 Android 6.0, AOSP 源码和 Chromium 源码彻底分离,AOSP 中不再包含 Chromium 的源码,取而代之的是一个 prebuilt 的 webview.apk 。
云水木石
2023/10/08
1.1K0
Android 10 中的浏览器构建
在Spring官网下载spring的约束文件和源码
2、点击projects,然后再点击springframework  https://spring.io/projects/spring-framework#learn
静谧星空TEL
2021/04/27
9940
在Spring官网下载spring的约束文件和源码
Springboot中Excel的下载操作(二)
最近在做SpringBoot项目,项目中需要上传Excel文件,对Excel文件中的内容进行解析,然后将需要的数据存入数据库,同时还要根据用户的需求,将需要的内容生成Excel文件,并下载下来。本篇主要是介绍Excel文件的生成以及下载,使用的开发工具是IDEA 。关于Excel文件的生成请移步SpringBoot项目中关于Excel的解析(一)。
23号杂货铺
2019/09/27
8670
Springboot中Excel的下载操作(二)
List.append() 在 Python 中不起作用,该怎么解决?
Python 是一种强大而灵活的编程语言,它提供了许多方便的数据结构和操作方法,其中之一就是列表(List)。列表是一个有序的集合,可以包含不同类型的元素,并且可以进行添加、删除和修改等操作。在 Python 中,我们通常使用 List.append() 方法向列表末尾添加元素。然而,在某些情况下,你可能会遇到 List.append() 方法不起作用的问题。本文将详细讨论这个问题并提供解决方法。
网络技术联盟站
2023/06/01
2.8K0
Android JNI 中的线程操作
Native 中支持的线程标准是 POSIX 线程,它定义了一套创建和操作线程的 API 。
音视频开发进阶
2019/07/26
1.2K0
Android中关于UUID的操作
UUID 通用唯一识别码(Universally Unique Identifier)是一种软件建构的标准; UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不是需要通过中央控制端来做辨识信息的指定。如此以阿里,每个人都可以创建与其他人不冲突的UUID。在这种情况下,就不需要考虑数据库创建时的重复问题; UUID是由一组32位数的16进制数字构成,UUID的标准形式包含32个16进制数字,以连字号分为五段。形式为 8-4-4-12的32个字符。 550e8400-e29b-41d4-a7
佛系编码
2018/05/22
2.4K0
Spring中如何操作JDBC
本篇文章介绍一下在Spring中如何使用JDBC,事实上,在Spring中使用JDBC和传统的JDBC或者一些JDBC框架,如:DBUtils的使用没有什么区别,所以Spring中使用JDBC是非常简单的。
wangweijun
2020/02/14
3490
WebSocket在Spring Boot中的使用
“WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。”
小诸葛
2020/04/14
4.3K0
WebSocket在Spring Boot中的使用
剖析 SPI 在 Spring 中的应用
SPI(Service Provider Interface),是Java内置的一种服务提供发现机制,可以用来提高框架的扩展性,主要用于框架的开发中,比如Dubbo,不同框架中实现略有差异,但核心机制相同,而Java的SPI机制可以为接口寻找服务实现。SPI机制将服务的具体实现转移到了程序外,为框架的扩展和解耦提供了极大的便利。
2020labs小助手
2022/06/21
1.1K0
点击加载更多

相似问题

用于android浏览器的操作栏

21

Spring :在浏览器中触发InputStream下载

10

在android中禁用浏览器下载

21

下载在Android浏览器中失败

13

spring-mvc下载操作

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文