Ошибка преобразования Tiff в pdf java [дубликат]

Хотя ответ на разметку всех пробелов является опрятным, на самом деле он не решает поставленную задачу, которая заключается в том, чтобы найти регулярное выражение. Возьмем, например, мой тестовый скрипт, который загружает веб-страницу и извлекает все номера телефонов с помощью регулярного выражения. Поскольку в любом случае вам понадобится регулярное выражение, вы также можете заставить регулярное выражение выполнить всю работу. Я придумал это:

1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?

Вот скрипт perl для его проверки. Когда вы сопоставляете, $ 1 содержит код области, $ 2 и $ 3 содержат номер телефона, а $ 5 содержит расширение. Мой тестовый скрипт загружает файл из Интернета и печатает в нем все номера телефонов.

#!/usr/bin/perl

my $us_phone_regex =
        '1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?';


my @tests =
(
"1-234-567-8901",
"1-234-567-8901 x1234",
"1-234-567-8901 ext1234",
"1 (234) 567-8901",
"1.234.567.8901",
"1/234/567/8901",
"12345678901",
"not a phone number"
);

foreach my $num (@tests)
{
        if( $num =~ m/$us_phone_regex/ )
        {
                print "match [$1-$2-$3]\n" if not defined $4;
                print "match [$1-$2-$3 $5]\n" if defined $4;
        }
        else
        {
                print "no match [$num]\n";
        }
}

#
# Extract all phone numbers from an arbitrary file.
#
my $external_filename =
        'http://web.textfiles.com/ezines/PHREAKSANDGEEKS/PnG-spring05.txt';
my @external_file = `curl $external_filename`;
foreach my $line (@external_file)
{
        if( $line =~ m/$us_phone_regex/ )
        {
                print "match $1 $2 $3\n";
        }
}

Изменить:

Вы можете изменить \ W * на \ s * \ W? \ s * в регулярном выражении, чтобы немного подтянуть его. Я не думал о регулярном выражении с точки зрения, скажем, проверки ввода пользователя в форме, когда я его написал, но это изменение позволяет использовать регулярное выражение для этой цели.

'1?\s*\W?\s*([2-9][0-8][0-9])\s*\W?\s*([2-9][0-9]{2})\s*\W?\s*([0-9]{4})(\se?x?t?(\d*))?';
1
задан aurelianr 29 March 2015 в 16:41
поделиться

2 ответа

Взгляните на пример MultipleImages , и вы обнаружите, что в вашем коде есть две ошибки:

  1. Вы создаете страницу размером 595 x 842 пользовательских единиц, и вы добавляете каждое изображение на эту страницу независимо от размеров изображения.
  2. Вы утверждаете, что добавлено только одно изображение, но это неверно. Вы добавляете все изображения друг к другу на странице на той же странице . Последнее изображение охватывает все предыдущие изображения.

Взгляните на мой код:

public void createPdf(String dest) throws IOException, DocumentException {
    Image img = Image.getInstance(IMAGES[0]);
    Document document = new Document(img);
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    for (String image : IMAGES) {
        img = Image.getInstance(image);
        document.setPageSize(img);
        document.newPage();
        img.setAbsolutePosition(0, 0);
        document.add(img);
    }
    document.close();
}

Создаю экземпляр Document, используя размер первого образ. Затем я перебираю массив изображений, устанавливая размер страницы следующей страницы на размер каждого изображения до . Я запускаю newPage() [*]. Затем я добавляю изображение в координату 0, 0, потому что теперь размер изображения будет соответствовать размеру каждой страницы.

[*] Метод newPage() имеет эффект только в том случае, если что-то добавлено к текущему стр. Когда вы впервые проходите цикл, ничего еще не добавлено, поэтому ничего не происходит. Вот почему вам нужно установить размер страницы в размере первого изображения при создании экземпляра Document.

4
ответ дан Bruno Lowagie 21 August 2018 в 07:19
поделиться
  • 1
    Большое спасибо за ваш комментарий. – aurelianr 31 March 2015 в 12:21
  • 2
    @ Bruno, я создал pdf, используя вышеприведенный код, но после открытия pdf он показывает неверную ошибку формата pdf. – Vasu 10 February 2017 в 11:51
  • 3
    @ Васу. Жаль. Поскольку я не могу воспроизвести вашу проблему (она работает для вас), я не могу вам помочь. – Bruno Lowagie 10 February 2017 в 12:03

Android имеет функцию «PdfDocument», чтобы достичь этого,

class Main2Activity : AppCompatActivity() {

private var imgFiles: Array<File?>? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main2)

    imgFiles= arrayOfNulls(2)

    imgFiles!![0] = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/doc1.png")
    imgFiles!![1] = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/doc3.png")



    val file = getOutputFile(File(Environment.getExternalStorageDirectory().absolutePath)
            , "/output.pdf")

    val fOut = FileOutputStream(file)
    val document = PdfDocument()

    var i = 0
    imgFiles?.forEach {
        i++
        val bitmap = BitmapFactory.decodeFile(it?.path)
        val pageInfo = PdfDocument.PageInfo.Builder(bitmap.width, bitmap.height, i).create()
        val page = document.startPage(pageInfo)
        val canvas = page?.canvas
        val paint = Paint()
        canvas?.drawPaint(paint)
        paint.color = Color.BLUE;
        canvas?.drawBitmap(bitmap, 0f, 0f, null)
        document.finishPage(page)
        bitmap.recycle()
    }
    document.writeTo(fOut)
    document.close()        

}

private fun getOutputFile(path: File, fileName: String): File? {
    if (!path.exists()) {
        path.mkdirs()
    }
    val file = File(path, fileName)
    try {
        if (file.exists()) {
            file.delete()
        }
        file.createNewFile()

    } catch (e: Exception) {
        e.printStackTrace()
    }
    return file
}

}

, наконец, разрешить разрешение на хранение в манифесте, это должно работать

0
ответ дан Shyam Kumar 21 August 2018 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: