|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вставка изображения в pdf файл на android
Добрый день, нужно вставить картинку из Image1 в pdf.
Использую java class Вот код по созданию pdf и надписи hello world. Не получается с типами, так как у Image1 можно только Bitmap, а нужно JBitmap, или тогда надо каое то другое решение. Код:
uses Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, Androidapi.Helpers, System.IOUtils; procedure TFormMain.ButtonCreatePdfClick(Sender: TObject); var Document: JPdfDocument; PageInfo: JPdfDocument_PageInfo; Page: JPdfDocument_Page; Canvas: JCanvas; Paint: JPaint; Rect: JRectF; FileName: string; OutputStream: JFileOutputStream; Intent: JIntent; //image:JBitmap; begin // create Pdf document Document := TJPdfDocument.JavaClass.init; try // create page 1 PageInfo := TJPageInfo_Builder.JavaClass.init(100, 100, 1).create; Page := Document.startPage(PageInfo); Canvas := Page.getCanvas; Paint := TJPaint.JavaClass.init; Paint.setARGB($FF, 0, 0, $FF); Canvas.drawText(StringToJString('Hello, world!'), 10, 50, Paint); Canvas.drawBitmap(); Document.finishPage(Page); |
#2
|
|||
|
|||
Можно попробовать конвертировать. У меня пока нет возможности испытать, но попробуйте оттолкнуться от этого:
Код:
uses FMX.Surfaces, FMX.Helpers.Android, FMX.Objects, Androidapi.JNI.GraphicsContentViewText; ... procedure TFormMain.ButtonCreatePdfClick(Sender: TObject); var Canvas: JCanvas; Paint: JPaint; mBitmap: JBitmap; Surface: TBitmapSurface; begin ... Surface := TBitmapSurface.Create; Surface.Assign(Image1.Bitmap); SurfaceToJBitmap(Surface, mBitmap); Canvas.drawBitmap(mBitmap, 0, 0, Paint); Surface.Free; ... end; |
#3
|
|||
|
|||
Все ок, только там не хватало одно модуля, я его дописал, но когда компилил, то появились не ошибки а предкпреждения, вот такие, честно говоря не знаю, что с ними делать
|
#4
|
|||
|
|||
Видимо, компилятор советует использовать TAndroidHelper.Activity вместо SharedActivity.
Кстати, а откуда тип JPdfDocument и подобное? Библиотека какая-то? Последний раз редактировалось DrimSDK, 29.09.2016 в 15:32. |
#5
|
|||
|
|||
Смирился с тем и загрузил приложение на телефон, но вот такая ошибка:
java.lang.lllegal.StateException:Current page not finished! Как я понимаю изображение не влезло в лист а4, но вроде оно не таких больших размеров. Вот код конечный: Код:
uses Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, Androidapi.Helpers, System.IOUtils,FMX.Surfaces,FMX.Helpers.Android,Androidapi.JNI.App; procedure TFormMain.ButtonCreatePdfClick(Sender: TObject); var Document: JPdfDocument; PageInfo: JPdfDocument_PageInfo; Page: JPdfDocument_Page; Canvas: JCanvas; Paint: JPaint; Rect: JRectF; FileName: string; OutputStream: JFileOutputStream; Intent: JIntent; mBitmap:JBitmap; Surface:TBitmapSurface; begin // create Pdf document Document := TJPdfDocument.JavaClass.init; try // create page 1 PageInfo := TJPageInfo_Builder.JavaClass.init(100, 100, 1).create; Page := Document.startPage(PageInfo); Canvas := Page.getCanvas; Paint := TJPaint.JavaClass.init; Paint.setARGB($FF, 0, 0, $FF); Surface.Assign(Image1.Bitmap); SurfaceToJBitmap(Surface, mBitmap); Canvas.drawBitmap(mBitmap,0,0,Paint); Surface.Free; Document.finishPage(Page); // create page 2 PageInfo := TJPageInfo_Builder.JavaClass.init(100, 100, 2).create; Page := Document.startPage(PageInfo); Canvas := Page.getCanvas; Paint := TJPaint.JavaClass.init; Paint.setARGB($FF, $FF, 0, 0); Canvas.drawLine(10, 10, 90, 10, Paint); Paint.setStrokeWidth(1); Paint.setARGB($FF, 0, $FF, 0); Canvas.drawLine(10, 20, 90, 20, Paint); Paint.setStrokeWidth(2); Paint.setARGB($FF, 0, 0, $FF); Canvas.drawLine(10, 30, 90, 30, Paint); Paint.setARGB($FF, $FF, $FF, 0); Canvas.drawRect(10, 40, 90, 60, Paint); Rect := TJRectF.JavaClass.init; Rect.&set(10, 70, 90, 90); Paint.setARGB($FF, $FF, 0, $FF); Canvas.drawRoundRect(Rect, 5, 5, Paint); Document.finishPage(Page); // write PDF document to file FileName := TPath.GetSharedDocumentsPath + PathDelim + 'demo.pdf'; OutputStream := TJFileOutputStream.JavaClass.init(StringToJString(FileName)); try Document.writeTo(OutputStream); finally OutputStream.close; end; finally Document.close; end; // start PDF viewer Intent := TJIntent.JavaClass.init; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setDataAndType(FileNameToUri(FileName), StringToJString('application/pdf')); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NO_HISTORY or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP); SharedActivity.StartActivity(Intent); end; Вторую страницу я накидал заранее для проверки. Она нормально идет В чем ошибка. По вашему вопросу:Искал на форумах, чтобы можно было без компонентов, вот и нашёл на java |