我的目标是在PDF中的注释中查找给定模式的JavaScript.为此,我提供了以下代码:
public static void main(String[] args) {
try {
// Reads and parses a PDF document
PdfReader reader = new PdfReader("Test.pdf");
// For each PDF page
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
// Get a page a PDF page
PdfDictionary page = reader.getPageN(i);
// Get all the annotations of page i
PdfArray annotsArray = page.getAsArray(PdfName.ANNOTS);
// If page does not have annotations
if (page.getAsArray(PdfName.ANNOTS) == null) {
continue;
}
// For each annotation
for (int j …
Run Code Online (Sandbox Code Playgroud) 我使用以下lambda表达式迭代PDF文件.
public static void run(String arg) {
Path rootDir = Paths.get(arg);
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**.pdf");
Files.walk(rootDir)
.filter(matcher::matches)
.forEach(Start::modify);
}
private static void modify(Path p) {
System.out.println(p.toString());
}
Run Code Online (Sandbox Code Playgroud)
这部分.forEach(Start::modify);
从lambda表达式所在的同一个类执行static方法修改.else
当没有找到PDF文件时,是否有可能添加类似子句的内容?
使用iText
我们可以轻松更改链接的缩放级别.甚至还有一段代码可以为GoTo
目标类型执行此操作.如需便利,请在下面找到.
PdfReader reader = new PdfReader(src);
PdfDictionary page = reader.getPageN(11);
PdfArray annots = page.getAsArray(PdfName.ANNOTS);
for (int i = 0; i < annots.size(); i++) {
PdfDictionary annotation = annots.getAsDict(i);
if (PdfName.LINK.equals(annotation.getAsName(PdfName.SUBTYPE))) {
PdfArray d = annotation.getAsArray(PdfName.DEST);
if (d != null && d.size() == 5 && PdfName.XYZ.equals(d.getAsName(1)))
d.set(4, new PdfNumber(0));
}
}
Run Code Online (Sandbox Code Playgroud)
该代码仅处理PDF文件中找到的目标类型之一.我有兴趣在其他类型的目的地中更改缩放(如果有人想知道,它们会在32000-1中列出).具体来说,我想更改每个目的地以GoTo
键入并指定我自己的坐标.我希望左坐标与要跳转的页面的页面高度相同.要做到这一点,我显然需要页码.我怎么得到它?
到目前为止我做了什么?该指令PdfArray d = annotation.getAsArray(PdfName.DEST)
给出了一个数组,其第一个(0基)元素是页面引用,而不是页面编号,如Bruno Lowagie在他的iText in Action, 2nd edition, p. 202). The array looks like this:
[1931 0 …
我想学习更多关于泛型的知识,为此我决定编写一个简单的应用程序.它允许使用检索所有实体的列表CriteriaQuery
.
首先,我尝试使用type parameter
(T)来生成代码.但是,我的代码甚至不会编译.为什么?
private static <T> List<T> retrieveAllT(Session session,
CriteriaBuilder criteriaBuilder, T t) {
CriteriaQuery<t> query = criteriaBuilder.createQuery(t);
Root root = query.from(t);
query.select(root);
return session.createQuery(query).getResultList();
}
Run Code Online (Sandbox Code Playgroud)
我想出了另一个解决方案.它工作正常,但编译器告诉我有关未经检查的强制转换.我理解其中的原因,但我想知道是否有可能以更优雅的方式编写这段代码(即没有未经检查的转换)?如果是这样,我该怎么做?
private static List<?> retrieveAll(Session session,
CriteriaBuilder criteriaBuilder, Class clazz) {
CriteriaQuery query = criteriaBuilder.createQuery(clazz);
Root root = query.from(clazz);
query.select(root);
return session.createQuery(query).getResultList();
}
Run Code Online (Sandbox Code Playgroud)
可以肯定的是,我知道@SuppressWarnings("unchecked")
.
我使用以下代码来获取Linux中的当前(焦点)窗口:
X11 x11 = X11.INSTANCE;
X11.Display display = x11.XOpenDisplay(null);
X11.Window window = x11.XDefaultRootWindow(display);
Run Code Online (Sandbox Code Playgroud)
现在,我想获取WM_CLASS
此窗口的属性。
在设置和读取WM_CLASS属性中,有一段显示了如何执行此操作:
若要读取窗口的WM_CLASS属性,请使用XGetClassHint()。
XClassHint包含:
typedef struct {
字符* res_name;
char * res_class;
} XClassHint;
但是,当我们查看X11.XWMHints(JNA API)时,我们看到没有这样的属性res_class
(即WM_CLASS
)。
那么,如何获取WM_CLASS
当前窗口的属性?
我想将字符串中的所有内容匹配到最后一个空格,但不包括它。为了举例,我想匹配以粗体显示的字符:
雷纳塔·格罗查
到目前为止,我有,^(.+\s)(.+)
但是它与最后一个空格匹配,我不希望这样。正像我一样,RegEx也可以使用英语以外的其他语言。
编辑:我没有提到的第二个捕获组不应该包含空间-它应该是GROCHAL
不GROCHAL
与前一个空间。
编辑2:基于两个答案提供的新RegEx是:^((.+)(?=\s))\s(.+)
用于替换匹配项的RegEx是\3, \1
。它可以达到预期的结果:
GROCHAL, RENATa T.
Run Code Online (Sandbox Code Playgroud)
任何改进都是可取的。
我在 HTML 代码中有以下内容:
<meta name="citation_journal_title" content="Psychological Bulletin" />
Run Code Online (Sandbox Code Playgroud)
使用以下方法很容易获取内容:
document.getElementsByName("citation_journal_title")[0].getAttribute("content")
Run Code Online (Sandbox Code Playgroud)
但是,我无法处理这个:
<meta property="og:site_name" content="APA PsycNET" />
Run Code Online (Sandbox Code Playgroud)
你如何检索 的内容og:site_name
?我知道
如何使用 javascript 从元标记中获取信息?
但我正在寻找一些非常简单的东西
document.getElementsByName("citation_journal_title")[0].getAttribute("content")
Run Code Online (Sandbox Code Playgroud) 我想删除所有括号,()
如果(且仅当)它们位于末尾并且不匹配以下模式\(\d{4}\p{Pd}\d{4}\) *
。该模式只不过是括号中的日期范围,例如。(1920-2988)
。
例如,我想匹配/捕获(用于删除,即string.replaceAll(my_regex_here, "")
):
富酒吧(blah)
foo bar(废话)废话(blah)
我不喜欢匹配:
我有以下正则表达式:\s*(.+?)\s*$。它往往会匹配太多:
(..) match (match)
(1920-1977)
我没有使用,r
但我最近决定使用它绘制图表 - 因为它具有很强的能力.我想让我的图表更好.具体来说,我会在数字上绘制数字.我看到添加标签到ggplot条形图,我试图使用
geom_text(aes(x=years, y=freq, ymax=freq, label=value,
hjust=ifelse(sign(value)>0, 1, 0)),
position = position_dodge(width=1)) +
Run Code Online (Sandbox Code Playgroud)
但这些数字未能显示出来.
这是我的代码:
# Load ggplot2 graphics package
library(ggplot2)
# Create dataset
dat <- data.frame(years = c("1991", "1993", "1997", "2001", "2005", "2007", "2011", "2015"),
freq = c(43.20, 52.13, 47.93, 46.29, 40.57, 53.88, 48.92, 50.92))
# Plot dataset with ggplot2
ggplot(dat, aes(years, freq)) + geom_bar(stat = "identity", width=0.55)
+ labs(x="Year",y="") + theme_classic()
# Comma as decimal mark
format(df, decimal.mark=",")
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以将给定类中的所有字段(有一些例外)设置为循环中的某个值.假设我们有一个包含许多字段的类,我们希望不是通过访问器手动填充其值,而是以半自动方式填充.在Java中,有一种方法可以显示给定类中的所有字段.这段代码是这样的:
for (Field field : MyClass.class.getDeclaredFields()) {
System.out.println(field);
}
Run Code Online (Sandbox Code Playgroud)
还有设置值的方法:
License license = new License();
for (Field field : License.class.getDeclaredFields()) {
System.out.println(field);
field.set(license, 99);
}
Run Code Online (Sandbox Code Playgroud)
但是,它失败并出现异常java.lang.IllegalAccessException: can not access a member of class License with modifiers "private
.所以我现在想是否可以为给定类中的私有字段设置值.