【问题标题】:How to search for non-ASCII characters ( cyrillic) in PDF using QuartzPDF?如何使用 QuartzPDF 在 PDF 中搜索非 ASCII 字符(西里尔字母)?
【发布时间】:2012-04-19 20:58:21
【问题描述】:

我偶然发现使用 PDDScanner 在 PDF 中搜索西里尔字母(以及任何其他非 ASCII)字符。我使用的代码类似于 Randon Ideas 博客中提到的 SO 代码。问题在于,对于西里尔 PDF,scanner 的输出是完全垃圾,无法解码为任何有意义的东西。西里尔 PDF 中的英文字符被完美地搜索。所以,问题在于,当涉及到西里尔文时,它是被编码的,我们不知道如何正确解码。

我们在这里错过了什么?

在此先感谢任何可以阐明该主题的人。

【问题讨论】:

  • 你能发布代码,还有“Randon 创意博客”的链接吗?这听起来像是一个字符编码问题,但 PDF 本身很棘手。
  • blog.random-ideas.net/?p=184 代码直接剪切粘贴

标签: ios pdf sdk full-text-search quartz-2d


【解决方案1】:

您是否尝试过通过不同的编码推送该字符串?当我查看NSString.h 时,我看到一些可疑标记为“西里尔字母”的东西,在同一行也有“Adobe”:)(即尝试NSWindowsCP1251StringEncoding

enum {
    NSASCIIStringEncoding = 1,      /* 0..127 only */
    NSNEXTSTEPStringEncoding = 2,
    NSJapaneseEUCStringEncoding = 3,
    NSUTF8StringEncoding = 4,
    NSISOLatin1StringEncoding = 5,
    NSSymbolStringEncoding = 6,
    NSNonLossyASCIIStringEncoding = 7,
    NSShiftJISStringEncoding = 8,          /* kCFStringEncodingDOSJapanese */
    NSISOLatin2StringEncoding = 9,
    NSUnicodeStringEncoding = 10,
    NSWindowsCP1251StringEncoding = 11,    /* Cyrillic; same as AdobeStandardCyrillic */
    NSWindowsCP1252StringEncoding = 12,    /* WinLatin1 */
    NSWindowsCP1253StringEncoding = 13,    /* Greek */
    NSWindowsCP1254StringEncoding = 14,    /* Turkish */
    NSWindowsCP1250StringEncoding = 15,    /* WinLatin2 */
    NSISO2022JPStringEncoding = 21,        /* ISO 2022 Japanese encoding for e-mail */
    NSMacOSRomanStringEncoding = 30,

    NSUTF16StringEncoding = NSUnicodeStringEncoding,      /* An alias for NSUnicodeStringEncoding */

    NSUTF16BigEndianStringEncoding = 0x90000100,          /* NSUTF16StringEncoding encoding with explicit endianness specified */
    NSUTF16LittleEndianStringEncoding = 0x94000100,       /* NSUTF16StringEncoding encoding with explicit endianness specified */

    NSUTF32StringEncoding = 0x8c000100,                   
    NSUTF32BigEndianStringEncoding = 0x98000100,          /* NSUTF32StringEncoding encoding with explicit endianness specified */
    NSUTF32LittleEndianStringEncoding = 0x9c000100        /* NSUTF32StringEncoding encoding with explicit endianness specified */
};

【讨论】:

  • 不幸的是,它没有帮助。我尝试使用上面的编码转换 NSSTring 但它不起作用...
  • NSData *data=[currentData dataUsingEncoding:NSUTF8StringEncoding]; NSString *ddd = [[NSString alloc] initWithData:数据编码:NSWindowsCP1251StringEncoding];问题是,当我尝试解码扫描仪返回的整个流时,它返回 null。其他编码再次给了我一个完整的垃圾。
【解决方案2】:

您可能需要更深入地了解Apple spec and headers on this - 添加 NSLog 行(并在此处发布)以了解扫描仪为普通 PDF 和西里尔文找到的内容。有很多可能性(可能是不同的编码,即您需要使用该编码将您拥有的字符串转换为不同的字符串)。我确信有一种方法可以列出表格中的所有运算符,以查看您的西里尔 pdf 中是否有额外的运算符。此外,this might help 是您尝试解决的一个非常相似的问题 - 它也指向 library that is more tuned to scanning

【讨论】:

  • 我添加了 NSlog 并得到了以下(摘录) ∼ ∼˚˚ ˛˚˚-∼˝-˙˝www.mediayug.ru∼˚˛˝˙ˆ ˇ˘ ˆ ˙ˆ ˛˝ ˛^: ^ˇ˘ ˘! ˘ ˘, ˘ ˘ ˘ˇ˘ iPad 〜 ˚˛˝˙^ˇ˘˙ ˚ ˘ˇ ˝ ˙˝ ˚˛˝˘ ˇ Android 2012-04-09 14:24:32.238 PublishLike[8939:16d03] ı ¾ ​​à ¶ ¾ À ¶ Å Æ Ä ¾ ½ ¸ Ä º Ç È ¸ ¶ ¾ Å Æ Ä º ¶ ¼ Ž € à ¶ Æ Ä Ç Ç ¾ ¿ Ç À Ä Æ Ñ À » Ç Ä Ç È ¶ ¸ Á Õ » È ˇ ¸ Ç Æ » º à »  ¸ È » Í » à ¾ » Å Ä Ç Á » º à ¾ Ë
  • 请注意英文字符是机器人编码的。但其余的文字看起来很神秘。
  • 希望我能提供更多帮助 - 谁首先创建/创作了上述 pdf?可以联系他们吗?您可以尝试/购买哪些 PDF 编辑工具来帮助您分析内部表格代码?
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多