我一直在研究在我的iOS应用程序中使用PDF.我已经想出了一些难题,比如扫描操作员并在UIWebView中显示PDF.但是,我真正需要做的是识别PDF文档中的可编辑字段.
理想情况下,我希望能够直接与字段进行交互,但这听起来非常困难,而且不是明显的第一步.我已经与可以通过这种方式操作PDF的Windows服务连接,并且可以确定可识别的字段,在表单视图中从用户收集字段数据,以及将该数据发送回服务器.问题是我无法看到如何识别字段.我正在与政府发行的PDF格式(如I-9和W-4)进行交互,因此我无法控制PDF的创建或字段的命名.这就是我需要动态提取它们的原因.任何帮助和/或参考将不胜感激.
我正在使用Apple的Quatrz 2D编程指南中的[此参考](https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_pdf_scan/dq_pdf_scan.html"PDF文档解析")扫描PDF时触发操作员回调,但这无法帮助我找到可编辑的字段.
我也只是加载带有PDF数据的UIWebView以显示给用户.
[_webView loadData:decodedData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];
Run Code Online (Sandbox Code Playgroud)
更新:
我构建了一个PDF Helper类(如下所示)来遍历目录中所有可能的对象类型.最初我没有处理数组中的嵌套字典,所以我没有看到表单字段.一旦我修复了,我意识到有必须考虑的父引用,以避免循环递归调用,这将启动无限循环.下面的代码显示了文档目录中的大量信息.现在我只需要解析它以隔离我需要的表单字段.
PDFHelper.h
#import <Foundation/Foundation.h>
id selfClass;
@interface PDFHelper : NSObject
@property (nonatomic, strong) NSData *pdfData;
@property (nonatomic, strong) NSMutableDictionary *pdfDict;
@property (nonatomic) int catalogLevel;
-(NSArray *) copyPDFArray:(CGPDFArrayRef)arr referencingDictionary:(CGPDFDictionaryRef)dict referencingKey:(const char *)key;
-(NSArray *) getFormFields;
-(CGPDFDictionaryRef) getDocumentCatalog;
@end
Run Code Online (Sandbox Code Playgroud)
PDFHelper.m
#import "PDFHelper.h"
#import "FileHelpers.h"
#import "Log.h"
@implementation PDFHelper
@synthesize pdfData = _pdfData;
@synthesize pdfDict = _pdfDict;
@synthesize catalogLevel = _catalogLevel;
-(id)init
{
self = [super init];
if(self)
{ …Run Code Online (Sandbox Code Playgroud) 这可能会提出很多问题,所以我会尝试尽可能具体.我负责支持我的工作使用的第三方应用程序.此应用程序执行的功能之一是从.dot文件中提取word文档,其中包含来自数据库的信息.它使用MERGEFIELD字段执行此操作.当这个数据被拉入时,它允许保留正常的日期字段和printdate字段,但是创建(我需要的那个)和保存的字段完全搞砸了.它将原始模板创建日期保留在那里,而不是像模板通常那样插入今天的日期作为文档创建日期,并使字段无效,使其为纯文本而不是创建字段,因此您无法更新它.当创建的字段与邮件合并一起使用时,我无法找到关于这是否是标准行为的确切答案.我会使用普通日期,但这些文件可以在几天内编辑,最后将其转换为PDF以获得"永久"副本.如果您从程序创建文档然后第二天打开它,它会自动更新日期...不是我们想要的,需要在它打开的第一天.
我有一个顿悟,使用powershell脚本来更新模板本身的创建.使用以下三行进行管理:
$a = Get-Date
$b = Get-Item "Q:\CUSTOM\DATETEST.dot"
$b.CreationTime = $a
Run Code Online (Sandbox Code Playgroud)
此脚本运行良好,文件信息已更新.但是,要获取文档中的实际单词以反映这一点,您必须进入Word,使用F9刷新表单中的字段,然后保存它.即使使用更新的创建日期,单词文档文本仍会显示在Word中或从其他应用程序中提取文档时的旧日期,直到您刷新并手动保存模板为止.这些表格不受保护,因此不是问题.我看到了一些用于编辑word文件的powershell脚本,但是无法找到一个用于刷新日期字段的脚本.我尝试使用修改日期和在表单中使用savedate字段的脚本,但这也需要进入并实际保存表单.有没有一种方法在powershell或批处理(或任何脚本语言,在这一点上不关心),这将使我能够刷新文档中的表单字段,然后保存它们,或者任何人都可以想到任何其他方式?我有几个文档需要这样做,所以每天早上手动操作也是不切实际的.
编辑:我发现以下代码,如下所述.在这段代码中我还发现我需要将Documents.Add更改为Documents.Open.我会注意到,这对于按照我需要的方式操作保存日期起作用,但创建仍然是一个谜.
$word=new-object -com Word.Application
$doc=$word.Documents.Add($filename)
$word.Visible=$False
$word.ActiveDocument.Fields.Update()
$doc.SaveAs([REF]$filename)
$doc.Close()
$word.Quit()
Run Code Online (Sandbox Code Playgroud) 我正在尝试在首页上插入自定义奏鸣曲表单字段类型,而不是在 SonataAdmin 中,如下所示:
$form = $this->createFormBuilder($content)
->add('titleEs', 'text', array('required' => true, 'label' => 'label.title.spanish', 'attr' => array('class' => 'col-xs-12 form-control input-lg')))
->add('contentEs', 'ckeditor', array('required' => true,'label' => 'label.content.spanish', 'attr' => array('class' => 'col-xs-12')))
->add('titleEn', 'text', array('required' => true,'label' => 'label.title.english', 'attr' => array('class' => 'col-xs-12 form-control input-lg')))
->add('contentEn', 'ckeditor', array('required' => true, 'label' => 'label.content.english', 'attr' => array('class' => 'col-xs-12')))
->add('header', 'sonata_type_model', array('required' => true,'label' => 'label.content.headerImage'), array('link_parameters' => array('context' => 'content/front', 'size' => 'big')))
//->add('coverImage', 'sonata_type_model_list', array('required' => true,'label' …Run Code Online (Sandbox Code Playgroud) 我正在寻找一些信息/参考/示例以及如何在 Bluebeam 中使用 javascript。
Bluebeam表示可以参考以下AcroForm文档:
但是,在尝试使用这些引用的某些对象/属性/方法时,似乎只能使用其中的一些。因此,由于没有专门的 Bluebeam 参考资料,弄清楚 Bluebeam 中的 JS 可以做什么真的很乏味。
我已经查看了 Bluebeam 的所有示例,如下所示: https://support.bluebeam.com/articles/how-can-i-create-interactive-stamps/
但这是非常基本的。即使仔细查看,也没有太多信息。
例如,这是我想做的事情: - 在使用“Doc/WillSave”事件保存之前打开一个对话框 - 填充对话框的不同字段 - 使用字段内容保存文件或预填充保存“另存为”对话框中的字段 - 保存文件。
显然,js 文件位于具有安全权限的文件夹中。但大多数这些功能似乎在 Bluebeam 中不存在。
我已经联系了 BB 支持,但还没有任何反馈。另外,我发现了其他相关帖子(@Logan),但关于它是如何解决(或不解决)的没有太多后续=>如何使用Javascript保存.pdf文档
谢谢。
我有这样的文件字段:
<input type="file" name="pic" accept="image/*">
Run Code Online (Sandbox Code Playgroud)
当我单击并选择文件时它工作正常,但当我将文件拖放到其中时它接受所有类型的文件。
任何想法 ?
仅供参考:我已经通过添加服务器端验证解决了这个问题。
我在书签中使用JavaScript来填充网站上的表单元素:
javascript:var f = document.forms[0];
f.getElementsByTagName('input')[0].value = 'myname';
f.getElementsByTagName('input')[1].value = 'mypassword';
f.getElementsByTagName('input')[2].click
Run Code Online (Sandbox Code Playgroud)
这有效.然而,我想创建的是一个bookmarklet,以便它打开目标页面,并在那里填充值; 然而,似乎加载了页面,其他JavaScript代码不会被执行.所以,以下不起作用.
javascript:window.location("mywebsite");var f = document.forms[0];
f.getElementsByTagName('input')[0].value = 'myname';
f.getElementsByTagName('input')[1].value = 'mypassword';
f.getElementsByTagName('input')[2].click;
Run Code Online (Sandbox Code Playgroud)
我还尝试使用setTimeout来延迟代码的执行,但这不起作用.
javascript:var f = document.forms[0];setTimeout("f.getElementsByTagName('input')[0].value = 'myname';f.getElementsByTagName('input')[1].value = 'mypassword';f.getElementsByTagName('input')[2].click;",1000);
Run Code Online (Sandbox Code Playgroud)
一旦我知道目标页面已满载,我该如何加载我的脚本?
我NullBooleanField在几个方面成功地实现了单选按钮,但问题是我无法将默认值设置为None.
这是代码:
models.py:
class ClinicalData(models.Model):
approved = models.NullBooleanField()
...
forms.py:
NA_YES_NO = ((None, 'N/A'), (True, 'Yes'), (False, 'No'))
class ClinicalDataForm(ModelForm):
approved = forms.BooleanField(widget=forms.RadioSelect(choices=NA_YES_NO))
class Meta:
model = ClinicalData
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:default:None在inital:None表单中的模型和/或设置中以及在表单实例的视图中进行设置.
这些都不是成功的.我目前正在使用CharField而不是NullBooleanField.
但有没有办法得到这个结果NullBooleanField???
我正在构建一个 Bootstrap 表单,电子邮件和密码表单元素显示了来自其他站点或其他站点上的某些早期表单登录的预填充数据。Chrome 浏览器会自动填充表单元素。
Bootstrap 中是否有方法的 HTML 属性可以在页面加载时强制这些表单元素为 null 或为空?
2015-10-29 -- 这是标记:
<form autocomplete="off" method="post" role="form">
<div class="form-group">
<input name="formSubmitted" type="hidden" value="1">
</div>
<div class="form-group">
<label for="username">Username</label>
<input autocomplete="off" autofocus="autofocus" class="form-control" id="username" name="username" required type="text">
</div>
<div class="form-group">
<label for="password">Password</label>
<input autocomplete="off" class="form-control" id="password" name="password" required type="password">
</div>
<button class="btn btn-default" type="submit">Login</button>
</form>
Run Code Online (Sandbox Code Playgroud) html google-chrome auto-populate form-fields twitter-bootstrap
我想在Yii2中的代码中添加自定义类到标签标签,但我不知道如何.
<?= $form->field($model, 'name',[
'template' => "{label}\n<div class='col-md-6'>{input}</div>\n{hint}\n{error}"])->textInput(['maxlength' => true])?>
Run Code Online (Sandbox Code Playgroud)
你能帮帮我吗?
我正在尝试显示/编辑 postgis 点类型。我使用的creof/doctrine2-spatial包提供了一些简洁的函数来获取一个点的 X 和 Y 值。以下在编辑/新形式下工作正常,因此该点被列为“YX”(在本例中为“纬度经度”)。
我不确定这是否是完成我需要的正确方法,但它有效。
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('name', 'text')
->add('coords', 'text', array(
'data'=>
$this->getSubject()->getCoords()->getLatitude() . ' ' .
$this->getSubject()->getCoords()->getLongitude()
));
}
Run Code Online (Sandbox Code Playgroud)
然而问题是列表视图。因为点被转换为字符串,因为"X Y"它在列表视图中以错误的顺序打印纬度和经度。它打印为“经度纬度”我对奏鸣曲很陌生,所以我不确定如何在列表视图中解决这个问题。
有任何想法吗?
更新:感谢@kunicmarko20 我已经解决了这个问题:
所以文件去了app/Resources/views/SonataAdmin/CRUD/geography_point_list.html.twig
我决定把文件放到一个合理的文件夹中。
模板内容为:
{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
{% block field %}
<div>
{{ object.coords.getLatitude }} {{ object.coords.getLongitude }}
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
使用模板的代码是:
->add('coords', null, ['template' => 'SonataAdmin/CRUD/geography_point_list.html.twig']);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我无法使用:类型路径?
form-fields ×10
forms ×2
html ×2
javascript ×2
pdf ×2
sonata-admin ×2
symfony ×2
adobe ×1
batch-file ×1
bookmarklet ×1
django ×1
ios ×1
ms-word ×1
objective-c ×1
powershell ×1
python ×1
settimeout ×1
sonata ×1
xcode ×1
yii2 ×1