проблемы с itextPdf, отклонение повторного инициализации в ранее сбойном классе java.lang.Класс

#java #android #mobile #itext

#java #Android #Мобильный #itext

Вопрос:

Я новичок в Android и пытаюсь преобразовать растровое изображение в Pdf в Android. Я использую файл itextpdf 5.5.4 jar. Код, который я использую, написан ниже:

 import com.itextpdf.text.BadElementException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

public void savePhotoPDF()
    {
        String currentTimestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"CameraApp");
        File picPDF = new File(dir.getPath() File.separator "IMG_" currentTimestamp ".pdf");

        //File picPDF = new File(dir.getPath(),"abcd.pdf");

        Document document = new Document();
        try
        {


            PdfWriter.getInstance(document, new FileOutputStream(picPDF));
            document.open();

            addImage(document);
            document.close();
        }

        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    //private static void addImage(Document document)
    private void addImage(Document document)
    {
        try
        {
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            clickedPhoto.compress(Bitmap.CompressFormat.PNG, 100, stream);

            bArray = stream.toByteArray();

            image = Image.getInstance(bArray);  ///Here i set byte array..you can do bitmap to byte array and set in image...
        }
        catch (BadElementException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch(Exception ex)
        {

        }
        // image.scaleAbsolute(150f, 150f);
        try
        {
            document.add(image);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  

в приведенном выше коде clickedPhoto — это не что иное, как тип растрового изображения, определенный как:

 clickedPhoto = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
  

Я также скомпилировал библиотеку itextpdf в app gradle:

 compile 'com.itextpdf:itextpdf:5.5.6'
  

Но я не знаю почему, но изображение (Bitmap:clickedPhoto) в формате pdf не сохраняется в указанном месте, и на мониторе Android я вижу:

 10-11 18:54:53.154 24531-24531/com.example.abhisheksirohi.myapplication I/art: Rejecting re-init on previously-failed class java.lang.Class<com.itextpdf.awt.PdfGraphics2D>
10-11 18:54:53.158 24531-24531/com.example.abhisheksirohi.myapplication I/art: Rejecting re-init on previously-failed class java.lang.Class<com.itextpdf.awt.PdfPrinterGraphics2D>
  

Я был бы очень рад, если бы кто-нибудь мог помочь мне устранить это исключение. Спасибо!!

Комментарии:

1. может быть проблема с файлом jar. расшифруйте jar, который вы используете, и проверьте, существует этот класс или нет. Если нет, используйте последнюю версию jar или старую jar для поиска этого класса. последняя версия jar — 5.5.10 mvnrepository.com/artifact/com.itextpdf/itextpdf/5.5.10

2. Я уже проверил его, и у него есть этот класс. Вот почему я не могу понять, почему он сталкивается с этой проблемой.

3. подождите, я тоже расшифровываю эту банку

4. Эй, пожалуйста, используйте последнюю версию jar. Я расшифровал последнюю версию jar, и класс присутствует в этом пакете. «com.itextpdf.text . Document » . Сначала загрузите последнюю версию jar и используйте 5.5.10 вместо 5.5.4. Дайте мне знать, если все еще не работает.

5. Для Android есть специальный jar, и он не включает ничего из awt, поскольку Android его не поддерживает.

Ответ №1:

Вы разрабатываете на Android. Это означает, что вам нужен порт iText для Android, который называется iTextG . iTextG идентичен iText (та же кодовая база), за исключением всего, что использует AWT и некоторые другие вещи, недоступные на Android.

Вы можете найти iTextG на веб-сайте iText: http://developers.itextpdf.com/itextg-android

Вы можете либо использовать Gradle, либо загрузить jar со страницы выпуска на Github: https://github.com/itext/itextpdf/releases/latest (используйте почтовый индекс itextg). По состоянию на октябрь 2016 года последняя версия — 5.5.10 .

Пожалуйста, не загружайте с SourceForge!SourceForge устарел, программное обеспечение iText его больше не использует. Это связано с тем, что SourceForge больше не заслуживает доверия. Были случаи, когда SourceForge внедрял шпионские программы в установщики другого программного обеспечения.Хотя этого еще не произошло с iText (и вряд ли произойдет из-за характера нашего программного обеспечения), мы не можем мириться с этими действиями и советуем всем нашим пользователям и клиентам избегать SourceForge .

Комментарии:

1. кроме того, предоставленная вами ссылка не работает. developers.itextpdf.com/itextg-android Я сталкиваюсь с той же проблемой, используя gradle compile ‘com.itextpdf:itextpdf: 5.5.6’

2. Используйте com.itextpdf:itextg:5.5.10 вместо этого.

3. Спасибо, что сообщили о неработающей ссылке, она была решена.

4. Спасибо, была такая же проблема, и теперь она отлично работает с iTextG.