Xamarin.Forsm for Android 显示 PDF

news2024/9/26 1:18:39

背景

某些情况下,需要让用户阅读下发的文件,特别是红头文件,这些文件一般都是使用PDF格式下发,这种文件有很重要的一点就是不能更改。这时候就需要使用原文件进行展示。

Xamarin.Forms Android 中的 WebView 控件是不能直接显示的,但是这并不影响,因为最终文件的显示依托于它的继承类 View 类。

解决方案

需要的 Nuget 包

XamarinLibrary.Xamarin.Android.Github.Barteksc.AndroidPdfViewer
Xamarin.Android.Support.v4

AndroidPdfViewer 包目前还是预览版,需要去使用命令安装
Support.v4 包不是必须,当系统目标版本大于 Android9.0 时,才需要引入

在 UI 项目里要做的操作

创建一个自定义控件继承 View,没了。对就这些
然后在视图中使用这自定义控件。

在平台 Android 项目里要做的操作

  1. 在 Resources 创建 layout 文件夹
  2. 在 layout 文件里添加 PDFLayout.xml 文件
  3. 创建 Renderers 文件夹并添加 XFAPDFViewRenderer.cs 文件
  4. PDF文件放在 Assets 文件夹下

文件说明

  • PDFLayout.xml 属性设置

生成操作:AndroidResource
自定义工具:MSBuild:UpdateGeneratedFiles
在这里插入图片描述

  • PDF文件设置
    设置生成操作:AndroidAsset 即可

  • PDFLayout.xml 文件内容:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.github.barteksc.pdfviewer.PDFView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/pdfView"/>
</RelativeLayout >
  • XFAPDFViewRenderer.cs文件内容:
using Android.Content;
using Com.Github.Barteksc.Pdfviewer;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using XFA.PdfTest.Controls;
using XFA.PdfTest.Droid.Renderers;

[assembly: ExportRenderer(typeof(XFAPDFView), typeof(XFAPDFViewRenderer))]
namespace XFA.PdfTest.Droid.Renderers
{
    public class XFAPDFViewRenderer : ViewRenderer<XFAPDFView, Android.Widget.RelativeLayout>
    {
        public XFAPDFViewRenderer(Context context) : base(context) { }

        private PDFView pdfView;

        private Android.Widget.RelativeLayout uiLayout;

        protected override void OnElementChanged(ElementChangedEventArgs<XFAPDFView> e)
        {
            var layout = Inflate(Context, Resource.Layout.PDFLayout, null);
            if (pdfView == null)
            {
                uiLayout = layout as Android.Widget.RelativeLayout;
            }

            pdfView = uiLayout.FindViewById<PDFView>(Resource.Id.pdfView);

            pdfView.FromAsset("XXX.pdf").Load();

            SetNativeControl(uiLayout);
        }
    }
}

结语

在 Xamarin.Forsm for Android 中显示 PDF 并不像 for IOS 中可以直接使用 WebView 进行显示,所以使用 WebView 是行不通的。多搜索,多探索,看看别人的案例虽然不能百分之百解决问题,但可以提供很有效的思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R统计绘图-NMDS、环境因子拟合(线性和非线性)、多元统计(adonis2和ANOSIM)及绘图(双因素自定义图例)

这个推文也在电脑里待了快一年了&#xff0c;拖延症患者&#xff0c;今天终于把它发出来了。NMDS分析过程已经R统计-PCA/PCoA/db-RDA/NMDS/CA/CCA/DCA等排序分析教程中写过了。最近又重新看了《Numerical Ecology with R》一书,巩固一下知识&#xff0c;正好重新整理了一下发出…

火山引擎推出一站式小程序监控方案

背景 小程序作为轻量级的应用发展迅速&#xff0c;国内已有多家小程序厂商相继推出。为了洞察用户真实体验及程序自身运行状况&#xff0c;监控已成为开发套件中必不可少的一环。随着业务愈来愈复杂&#xff0c;各厂商小程序管理后台免费提供的监控能力逐渐满足不了大部分业务…

软考中级之数据库系统(重点)

涉及考点:数据库模式,ER模型,关系代数与元祖演算,规范化理论,并发控制,分布式数据库系统,数据仓库和数据挖掘 数据库模式 三级模式-二级映射 常考选择题 三级模式,两种映射的这种涉及属于层次架构体的设计,这种设计为我们在应用数据库的时候提供了很多便利,同时提高了整个体…

功能性材料深入超级赛道,赋能多行业迭代升级

中国国际胶粘剂及密封剂展览会深耕胶粘剂、密封剂和胶粘带行业26年&#xff0c;是行业认可的、优质的贸易与技术交流平台。展会连接了十几个行业的买家和卖家&#xff0c;包括汽车、电子、新能源、轨道交通、工业等重要领域&#xff0c;为客户提供封装、粘合、散热、装配制造等…

拿下宁王、迪王的湖南裕能,还能“狂飙”多远?

文|智能相对论作者|Kinki近日&#xff0c;磷酸铁锂正极材料龙头湖南裕能正式登陆A股&#xff0c;上市当天市值超过了400亿元&#xff0c;投资者中一签可赚1.49万元&#xff0c;可谓近年低迷的资本市场中一支“大肉签”。不过在 “开门红”之后&#xff0c;湖南裕能的股价便一路…

leetcode16. 最接近的三数之和

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1&#xff1a; 输入&#xff1a;nums [-1,2,1,-4], target 1 输出&#xff1a;2 …

linux服务器上Docker中安装jenkins

前言 Jenkins是开源CI&CD软件领导者&#xff0c; 提供超过1000个插件来支持构建、部署、自动化&#xff0c; 满足任何项目的需要。 本文主要提供通过docker安装jenkins镜像&#xff0c;并配置nginx反向代理页面配置和使用。通过jenkins完成项目的自动部署。 我在安装之前…

ThinkPHP ^6图片操作进阶

图片裁剪、缩略、水印不再是TP框架系统内置的功能&#xff0c;需要安装。 目录 安装 图片处理 1.创建图片对象 2.获取图片属性 3.裁剪图像 4.生成缩略图 6.保存图像 7.水印 安装 使用composer在项目根目录打开命令行执行&#xff1a; composer require topthink/think…

Simulink 电机控制:单电阻三相电流重构算法仿真总结

目录 理论基础 仿真实现 硬件实现 总结 理论基础 参考Microchip AN1299 《PMSM 无传感器 FOC的单分流三相电流重构算法》&#xff0c;详细的理论可以参考这个文档&#xff0c;这里只简单总结一下。单电阻采样的核心就是要在一个周期内实现两相电流的采样并通过基尔霍夫定…

【UE4 制作自己的载具】3-载具蓝图实现(基本)

效果步骤新建一个蓝图&#xff0c;继承“WheeledVehicle&#xff08;轮式载具&#xff09;”命名为“Vehicle_BP”&#xff0c;双击打开该蓝图选中“Mesh&#xff08;继承&#xff09;”&#xff0c;然后在细节中&#xff0c;骨架网格体选择“Vehicle”添加一个弹簧臂和摄像机组…

Windows下mysql8.0.32安装配置方法图文教程

Windows下mysql8.0.31安装配置方法图文教程 1、下载可以到官网的地址下载即可 https://dev.mysql.com/downloads/file/?id516465 2、解压缩并重命名mysql-8.0.32-winx64为mysql 3、创建my.ini配置文件&#xff0c;创建data文件夹。 4、打开记事本另存为my.ini并且使用ANSI编…

23年了,GOPATH和go.mod 还在冲突!

现在 新配了 go环境 设置了GOROOT&#xff0c;GOPATH &#xff0c;发现引用别的包会出问题。一直会报 package XX not in GOROOT &#xff08;xxxx&#xff09;我的目录&#xff1a;我的开发目录&#xff1a; /home/fate/go_projects/老样子&#xff0c;下面有 /home/fate/go_…

元宇宙与ChatGPT结合 一场颠覆式场景革命或将到来?

元宇宙和ChatGPT都是当前数字化领域中非常热门的技术和应用&#xff0c;两者之间也存在一定的关系&#xff0c;结合起来&#xff0c;可以为企业提供更加智能化、个性化的服务和支持&#xff0c;同时也可以拓展企业的市场和品牌影响力&#xff0c;提高企业的效率和创新能力。 元…

公司新来一00后说我不会自动化测试,3个问题直接给他问趴下...

今天我们公司刚入职一小伙&#xff0c;听说是00后&#xff0c;今天在办公室交流了一下&#xff0c;他问我会不会自动化测试&#xff0c;我直呼好家伙&#xff0c;直接问了他3个开展自动化测试问题....一问3不知.....还有待加强呀我们在制定自动化测试实施策略时&#xff0c;首先…

java servlet详解

一、Servlet实现方式 1、实现Servlet接口&#xff0c;接口中的方法必须全部实现。此种方式支持最大程度的自定义。 2、继承GenericServlet&#xff0c;service方法必须重写&#xff0c;其他方可根据需求&#xff0c;选择性重写。 使用此种方式&#xff0c;表示只在接收和响应…

作为通信人,你知道国内有哪些通信领域的博物馆吗?

众所周知&#xff0c;博物馆是收藏、展示和研究历史文物的地方。参观博物馆&#xff0c;既可以回顾历史往事&#xff0c;也可以学习知识。 那么&#xff0c;作为通信人&#xff0c;你知道国内有哪些通信领域的博物馆吗&#xff1f; 今天&#xff0c;就让小编给大家介绍介绍。█…

微鳄365,可私有化部署的企业管理软件,让数据更安全让管理更方便

编者按&#xff1a;本文分析了企业数字化转型中常遇到的一些困难&#xff0c;并进一步指出微鳄365一体化解决方案&#xff0c;可以帮助企业克服这些困难。关键词&#xff1a;免安装&#xff0c;免维护&#xff0c;成本低&#xff0c;数据安全&#xff0c;共享协作&#xff0c;个…

利用STM32的LR寄存器调试HardFault错误

R14 or LR(Link Register) HardFault调试的思路 先在出错误的地方打断点&#xff0c;让程序的状态固定下来&#xff1b;由于HardFault属于异常&#xff0c;所以出现HardFault后&#xff0c;LR的值一定是0xFFFFFFFx&#xff0c;这样就可以根据其值&#xff0c;判断程序进入这个…

C++学习记录——십일 string类模拟实现

这篇对于string类的实现会一步步来&#xff0c;从错误到正确&#xff0c;尽量展现可能会忽略掉的细节. 文章目录1、初始化列表2、拷贝构造函数和赋值函数3、循环输出&#xff0c;迭代器4、插入删除等5、流插入流提取6、其它接口1、初始化列表 先写下来这些代码 String.h #pra…