diff --git a/android/build.gradle b/android/build.gradle index 8990414..86dae0f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,14 +2,14 @@ group 'com.afur.flutter_html_to_pdf' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.9.0' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -25,8 +25,8 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 30 - + compileSdkVersion 34 + namespace "com.afur.flutter_html_to_pdf" compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 3c9d085..cb24abd 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/android/src/main/kotlin/com/afur/flutter_html_to_pdf/HtmlToPdfConverter.kt b/android/src/main/kotlin/com/afur/flutter_html_to_pdf/HtmlToPdfConverter.kt index 8d6144e..eb8d5b1 100644 --- a/android/src/main/kotlin/com/afur/flutter_html_to_pdf/HtmlToPdfConverter.kt +++ b/android/src/main/kotlin/com/afur/flutter_html_to_pdf/HtmlToPdfConverter.kt @@ -41,7 +41,7 @@ class HtmlToPdfConverter { val attributes = PrintAttributes.Builder() .setMediaSize(PrintAttributes.MediaSize.ISO_A4) .setResolution(PrintAttributes.Resolution("pdf", "pdf", 600, 600)) - .setMinMargins(PrintAttributes.Margins.NO_MARGINS).build() + .setMinMargins(PrintAttributes.Margins(50, 50, 50, 50)).build() val printer = PdfPrinter(attributes) diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index b0ed919..1b3e949 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -26,7 +26,7 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 30 + compileSdkVersion 33 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -44,7 +44,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.afur.flutter_html_to_pdf_example" - minSdkVersion 16 + minSdkVersion 21 targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/example/android/build.gradle b/example/android/build.gradle index ed45c65..ca618df 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.7.20' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -24,6 +24,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index bc6a58a..cc5527d 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 9367d48..9625e10 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 11.0 diff --git a/example/ios/Podfile b/example/ios/Podfile index 1e8c3c9..88359b2 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index c8e59bd..ea369d5 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -164,7 +164,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0910; + LastUpgradeCheck = 1300; ORGANIZATIONNAME = "The Chromium Authors"; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -210,10 +210,12 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -229,15 +231,15 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/flutter_full_pdf_viewer/flutter_full_pdf_viewer.framework", "${BUILT_PRODUCTS_DIR}/flutter_html_to_pdf/flutter_html_to_pdf.framework", - "${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework", + "${BUILT_PRODUCTS_DIR}/flutter_pdfview/flutter_pdfview.framework", + "${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_full_pdf_viewer.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_html_to_pdf.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_pdfview.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -246,6 +248,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -353,7 +356,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -374,7 +377,10 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", @@ -432,7 +438,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -479,7 +485,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -501,7 +507,10 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", @@ -529,7 +538,10 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 786d6aa..f156018 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ UIViewControllerBasedStatusBarAppearance + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/example/lib/main.dart b/example/lib/main.dart index 0dc3237..76eb9fe 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -2,8 +2,9 @@ import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_full_pdf_viewer/flutter_full_pdf_viewer.dart'; +// import 'package:flutter_full_pdf_viewer/flutter_full_pdf_viewer.dart'; import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; +import 'package:flutter_pdfview/flutter_pdfview.dart'; import 'package:path_provider/path_provider.dart'; void main() { @@ -18,7 +19,9 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - String generatedPdfFilePath; + String? generatedPdfFilePath; + + Completer? _pdfViewController = Completer(); @override void initState() { @@ -26,7 +29,7 @@ class _MyAppState extends State { generateExampleDocument(); } - Future generateExampleDocument() async { + Future generateExampleDocument() async { final htmlContent = """ @@ -71,8 +74,10 @@ class _MyAppState extends State { final targetPath = appDocDir.path; final targetFileName = "example-pdf"; - final generatedPdfFile = await FlutterHtmlToPdf.convertFromHtmlContent(htmlContent, targetPath, targetFileName); + final generatedPdfFile = await FlutterHtmlToPdf.convertFromHtmlContent( + htmlContent, targetPath, targetFileName); generatedPdfFilePath = generatedPdfFile.path; + return generatedPdfFilePath; } @override @@ -86,7 +91,49 @@ class _MyAppState extends State { onPressed: () { Navigator.push( context, - MaterialPageRoute(builder: (context) => PDFViewerScaffold(appBar: AppBar(title: Text("Generated PDF Document")), path: generatedPdfFilePath)), + MaterialPageRoute( + builder: (context) => Scaffold( + appBar: AppBar(title: Text("Generated PDF Document")), + body: FutureBuilder( + future: generateExampleDocument(), + builder: (context, snapshot) { + if (snapshot.hasData) { + return PDFView( + filePath: snapshot.data!, + enableSwipe: true, + swipeHorizontal: true, + autoSpacing: false, + pageFling: false, + onRender: (_pages) { + // setState(() { + // pages = _pages; + // isReady = true; + // }); + }, + onError: (error) { + print(error.toString()); + }, + onPageError: (page, error) { + print('$page: ${error.toString()}'); + }, + onViewCreated: + (PDFViewController pdfViewController) { + _pdfViewController + ?.complete(pdfViewController); + }, + onPageChanged: (int? page, int? total) { + print('page change: $page/$total'); + }, + ); + } else if (snapshot.connectionState == + ConnectionState.waiting) { + return Center( + child: CircularProgressIndicator(), + ); + } + return Text('${snapshot.error}'); + }), + )), ); }, ), diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 8923a59..39ef471 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -3,17 +3,18 @@ description: Demonstrates how to use the flutter_html_to_pdf plugin. publish_to: 'none' environment: - sdk: ">=2.0.0-dev.68.0 <3.0.0" + sdk: ">=3.0.0 <4.0.0" dependencies: flutter: sdk: flutter - path_provider: ^0.4.1 - flutter_full_pdf_viewer: ^1.0.2 + path_provider: ^2.0.15 + # flutter_full_pdf_viewer: ^1.0.2 + flutter_pdfview: ^1.3.1 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.2 + cupertino_icons: ^1.0.5 dev_dependencies: flutter_test: diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart index d61f707..2fce191 100644 --- a/example/test/widget_test.dart +++ b/example/test/widget_test.dart @@ -13,7 +13,7 @@ import 'package:flutter_html_to_pdf_example/main.dart'; void main() { testWidgets('Verify Platform version', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); + await tester.pumpWidget( MyApp()); // Verify that platform version is retrieved. expect( diff --git a/ios/Classes/PDFCreator.swift b/ios/Classes/PDFCreator.swift index 41b8e12..3f079bd 100644 --- a/ios/Classes/PDFCreator.swift +++ b/ios/Classes/PDFCreator.swift @@ -14,8 +14,10 @@ class PDFCreator { // assign paperRect and printableRect values let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi + let printable = CGRect(x: 20, y: 50, width: 575.2, height: 720.0) + renderer.setValue(page, forKey: "paperRect") - renderer.setValue(page, forKey: "printableRect") + renderer.setValue(printable, forKey: "printableRect") // create pdf context and draw each page let pdfData = NSMutableData() diff --git a/lib/file_utils.dart b/lib/file_utils.dart index 84ef7d1..fb3342e 100644 --- a/lib/file_utils.dart +++ b/lib/file_utils.dart @@ -6,8 +6,8 @@ class FileUtils { } static File copyAndDeleteOriginalFile(String generatedFilePath, String targetDirectory, String targetName) { - final fileOriginal = new File(generatedFilePath); - final fileCopy = new File('$targetDirectory/$targetName.pdf'); + final fileOriginal = File(generatedFilePath); + final fileCopy = File('$targetDirectory/$targetName.pdf'); fileCopy.writeAsBytesSync(File.fromUri(fileOriginal.uri).readAsBytesSync()); fileOriginal.delete(); return fileCopy; diff --git a/lib/flutter_html_to_pdf.dart b/lib/flutter_html_to_pdf.dart index 148ee2e..4a6d25f 100644 --- a/lib/flutter_html_to_pdf.dart +++ b/lib/flutter_html_to_pdf.dart @@ -2,11 +2,11 @@ import 'dart:async'; import 'dart:io'; import 'package:flutter/services.dart'; -import 'package:flutter_html_to_pdf/file_utils.dart'; +import 'file_utils.dart'; /// HTML to PDF Converter class FlutterHtmlToPdf { - static const MethodChannel _channel = const MethodChannel('flutter_html_to_pdf'); + static const MethodChannel _channel = MethodChannel('flutter_html_to_pdf'); /// Creates PDF Document from HTML content /// Can throw a [PlatformException] or (unlikely) a [MissingPluginException] converting html to pdf diff --git a/pubspec.yaml b/pubspec.yaml index db314ef..1a7c795 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.7.0 homepage: https://github.com/Afur/flutter_html_to_pdf environment: - sdk: '>=2.12.0 <3.0.0' + sdk: '>=3.0.0 <4.0.0' flutter: ">=1.12.0" dependencies: