1

次のコードでは、ユーザーは検索文字列 (barcodedata) を入力します。その文字列は最初の 5 文字に切り捨てられ、ジョブ番号として使用されます。ジョブ番号は、バーコードデータをスキャンする PDF の名前でもあります。

私が望むのは、「検索」ボタンで以下のコードを実行し、見つかった値を startpagedata に返すことです。

プログラムが実際に PDF をスキャンして検索文字列を探していないのか、それとも単に値がプログラムに返されていないのかはわかりません。

using BitMiracle.Docotic.Pdf;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Windows.Forms;
using Acrobat;

namespace BarCodeReader
{
    public partial class Form1 : Form
    {
        public string stringsToFind;
        public string pathtofile;

        public Form1()
        {
            InitializeComponent();
        }

        private void barcodedata_TextChanged(object sender, EventArgs e)
        {
            stringsToFind=barcodedata.Text;
            pathtofile = "C:\\" + StringTool.Truncate(barcodedata.Text, 5) + ".pdf";
            jobnumberdata.Text = StringTool.Truncate(barcodedata.Text, 5);
        }

        private void label4_Click(object sender, EventArgs e)
        {

        }

        private void jobnumberdata_TextChanged(object sender, EventArgs e)
        {
            jobnumberdata.Text = jobnumberdata.Text.TrimStart('0');
            Console.WriteLine(jobnumberdata.Text);
        }

        private void startpagedata_TextChanged(object sender, EventArgs e)
        {
            Console.WriteLine(startpagedata.Text);
        }

        private void piecesdata_TextChanged(object sender, EventArgs e)
        {
        }

        private void FindIt_Click(object sender, EventArgs e)
        {
            PdfDocument pdf = new PdfDocument(pathtofile);
            for (int i = 0; i < pdf.Pages.Count; i++)
            {
                string pageText = pdf.Pages[i].GetText();
                int count = 0;
                int lastStartIndex = pageText.IndexOf(stringsToFind, 0, StringComparison.CurrentCultureIgnoreCase);
                while (lastStartIndex != -1)
                {
                    count++;
                    lastStartIndex = pageText.IndexOf(stringsToFind, lastStartIndex + 1, StringComparison.CurrentCultureIgnoreCase);
                }

                if (count != 0)
                    startpagedata.Text = Convert.ToString(lastStartIndex);
            }

        }
    }

    public static class StringTool
    {
        /// <summary>
        /// Get a substring of the first N characters.
        /// </summary>
        public static string Truncate(string source, int length)
        {
            if (source.Length > length)
            {
                source = source.Substring(0, length);
            }
            return source;
        }

        /// <summary>
        /// Get a substring of the first N characters. [Slow]
        /// </summary>
        public static string Truncate2(string source, int length)
        {
            return source.Substring(0, Math.Min(length, source.Length));
        }
    }
}
4

2 に答える 2

1

このコードの問題は何ですか? クリック時に FindIt_Click が実行されない場合は、おそらく [検索] ボタンに関連付けられていません。

FindIt_Click のコードは、次の点を除けば非常に正しいように見えます。

  • 期待どおりに動作しない場合があります。検索文字列が見つかった最後のページのテキスト内の最後のインデックスを返します。しかし、検索文字列が見つかった最後のページのインデックスを期待しているでしょうか?
  • pageText.LastIndexOfメソッドを使用して、lastStartIndexをすばやく見つけることができます。
  • PdfDocument インスタンスを Dispose することを忘れないでください。例: usingキーワードを使用します。
    使用 (PdfDocument pdf = 新しい PdfDocument(pathtofile))
    {
    ...
    }
于 2013-03-02T03:44:24.760 に答える
0

使用するには、現在のページ番号を見つけるために使用Docotic.pdfできます。Acrobat.dllまず、pdf ファイルを開き、文字列を検索します。

Acroavdoc.open("Filepath","Temperory title") 

Acroavdoc.FindText("String").

この PDF ファイルで文字列が見つかった場合、カーソルが特定のページに移動し、検索された文字列が強調表示されます。Acroavpageview.GetPageNum()現在のページ番号を取得するために使用します。

Dim AcroXAVDoc As CAcroAVDoc
Dim Acroavpage As AcroAVPageView
Dim AcroXApp As CAcroApp

AcroXAVDoc = CType(CreateObject("AcroExch.AVDoc"), Acrobat.CAcroAVDoc)
AcroXApp = CType(CreateObject("AcroExch.App"), Acrobat.CAcroApp)

AcroXAVDoc.Open("File path", "Original document")
AcroXAVDoc.FindText("String is to searched", True, True, False)

Acroavpage = AcroXAVDoc.GetAVPageView()

Dim x As Integer = Acroavpage.GetPageNum
MsgBox("the string found in page number" & x) 
于 2013-04-23T12:03:25.560 に答える